-
[프로그래머스] 같은 숫자는 싫어 Javascript알고리즘 2021. 10. 4. 17:04
문제 내용
배열 arr 은 숫자 0 ~ 9 로 이루어져 있음.배열에서 연속적으로 나타나는 숫자는 하나만 남기고 모두 제거하고순서가 유지되어야 함.
예를 들어,
arr return [3, 3, 3, 2, 2, 1] [3, 2, 1] 이렇게 순서도 유지되어야 함.
제한사항
- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
전체 코드
function solution(arr) { // 1 let previousValue = arr[0]; // 2 let newArr = [previousValue]; // 3 for (let i = 1; i < arr.length; i++) { // 4 if (previousValue != arr[i]) { newArr.push(arr[i]); } // 5 previousValue = arr[i]; } // 6 return newArr; }
- 먼저 previousValue (이전 값) 을 생성한다. (previousValue 는 배열의 가장 처음 값 (가장 앞에 있는 값))
- newArr 에 previousValue 를 저장한다.
- i = 1 부터 시작해서 arr 의 길이의 끝까지 반복을 진행한다.
- 만약 previousValue 와 arr[i] (현재 값) 이 동일하지 않다면 newArr 에 arr[i] 를 추가한다.
- 현재 값은 이제 이전 값이 되야하므로 previousValue 를 arr[i] 로 할당한다.
- 반복문이 종료되면 newArr 를 return 한다.
예를 들면,
arr return [3, 3, 3, 2, 2, 1] [3, 2, 1] 이렇게 값이 들어온다 가정하자.
let previousValue = arr[0]; let newArr = [previousValue];
먼저 previousValue 는 arr[0] 즉, 3 이 된다.
그리고 newArr 은 [3] 이 된다.
for (let i = 1; i < arr.length; i++) { // 4 if (previousValue != arr[i]) { newArr.push(arr[i]); } // 5 previousValue = arr[i]; }
반복문을 진행할 때 i = 1로 설정한다.
이유는 이미 arr 의 처음 값을 설정하였기 때문이다.
만약 previousValue 가 arr[i] 과 같지 않다면 newArr 에 arr[i] 값을 넣어준다.
현재 i 는 1이므로 arr[1] 의 값은 3이다.
따라서 previousValue 와 arr[i] 의 값은 동일하므로 이 조건문은 실행되지 않는다.
그리고 previousValue 에 arr[i] 의 값을 할당한다.
이렇게 동일하게 i = 2 까지 진행이 된다.
i = 3이 되면
previousValue = 3 이고 arr[i] = 2 이다.
따라서 둘은 같지 않으므로 newArr 에 2를 추가한다
newArr = [3, 2] 가 된다.
그리고 previousValue = arr[i] 즉, 2가 된다.
모두 진행하게 되면 newArr = [3, 2, 1] 이 된다.
결론
slice 를 이용하여 arr 자체를 변경하려 했는데 slice 가 시간이 오래 걸려서 시간 초과가 났었다.
그래서 그냥 단순하게 구현하였다.
출처 : 프로그래머스 연습문제 같은 숫자는 싫어
https://programmers.co.kr/learn/courses/30/lessons/12906'알고리즘' 카테고리의 다른 글
[백준] 배열 돌리기 4 (17406번) Swift (0) 2021.10.07 [프로그래머스] 전력망을 둘로 나누기 (위클리 챌린지 9주차) Javascript (0) 2021.10.05 [프로그래머스] 숫자의 표현 Javascript (0) 2021.10.04 [프로그래머스] 없는 숫자 더하기 Javascript (0) 2021.10.04 [프로그래머스] 완주하지 못한 선수 Javascript (0) 2021.10.04