https://programmers.co.kr/learn/courses/30/lessons/12906
코딩테스트 연습 - 같은 숫자는 싫어
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은
programmers.co.kr
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거 - 주어진 자료는 무엇인가?
- arr = 숫자 0부터 9까지로 이루어져 있는 배열 - 조건은 무엇인가?
- 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지
- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
2. 계획
- 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
- for문
- 주어진 배열에 map을 사용해서 배열 내 요소들끼리 비교한다.
- 현재 요소랑 그 다음 요소랑 같으면 넘어가고
- 현재 요소랑 그 다음 요소랑 같지 않으면 현재 요소를 리턴
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (arr) => {
let uniqueNumbers = [];
for (i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i + 1]) {
uniqueNumbers.push(arr[i]);
}
}
};
test('uniqueNumbers', () => {
expect(solution([1,1,3,3,0,1,1])).toEqual([1,3,0,1]);
});
4. 반성
- 문제를 다른 방식으로 해결할 수 있는가?
- filter 사용해서 해결
문제를 보자마자 set 써서 중복제거하면 되겠다고 생각을 했었는데
중복제거 문제가 아니라 연속으로 같은 숫자가 오면 숫자를 하나만 남기는거였다.
문제를 잘 읽어야겠다,,
문제를 정확하게 이해하고 for문으로 풀어봤다.
배열에서 숫자랑 이 다음 숫자랑 같다면 넘어가다가
다음 숫자가 같지 않을 경우에 현재 비교하고 있는 숫자를 새로운 배열에 넣어야겠닫고 생각했다.
그렇게 풀고나니 테스트 통과를 했다.
다른 사람 풀이를 보니까 filter를 사용한게 인상적이었다.
return arr.filter((num, index) => num !== arr[index+1]);
이렇게 풀었는데 filter를 이렇게도 사용할 수 있겠구나 생각했다.
'코테연습' 카테고리의 다른 글
70. 카펫 Javascript (0) | 2022.06.27 |
---|---|
69. 가장 큰 수 Javascript (0) | 2022.06.24 |
67. 나머지가 1이 되는 수 찾기 (0) | 2022.06.22 |
66. 2016년 Javascript (0) | 2022.06.21 |
65. 두 개 뽑아서 더하기 (0) | 2022.06.20 |
댓글