junior developer :)/알고리즘 & 코딩테스트

프로그래머스 _ 같은 숫자는 싫어(JS/Level.1)

ㅁ윤슬ㅁ 2022. 8. 30. 12:56
728x90
반응형
문제

각 원소가 0부터 9까지로 이루어져있는 배열 arr가 주어지고 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거한다

단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야한다

배열 arr에서 연속으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성하세요

 

ex. arr = [1,1,3,3,0,1,1] 이면 [1,3,0,1]을 return 한다

arr = [4,4,4,3,3] 이면 [4,3]을 return 한다 

 

* 같은 값은 모조리 제거하는 것이 아닌 연속적으로 적혀있는 같은 값만 제거한다

 

정확성테스트 성공 & 효율성테스트 실패 코드
function solution(arr)
{
    let answer = [];
    for(let a = 0; a < arr.length; a++)
    { 
        if(arr[a] === arr[a+1])   
        {
            arr.splice(a,1);   
            a--;
        }
    }
    answer = arr;
    return answer;
}

전의 "제일 작은 수 제거하기" 풀이와 비슷하게 비교 후 해당 숫자 삭제 방식으로 풀어봤는데, 정답은 맞지만 효율성 문제에서 시간 초과가 나왔어요

찾아 본 이유로는

splice를 사용하여 배열의 원소를 제거한다면 제거된 원소의 뒷 원소부터 차례대로 앞으로 당기는 작업을 하기 때문에 원소의 수가 많아지게 되면 앞으로 당기는 작업을 하는 과정에서 많은 시간이 소요되게 된다

는 것이였습니다.

 

최종 제출 코드

그래서 제거하지 않고 새로운 배열에 추가하는 방식으로 코드를 구현해봤습니다.

function solution(arr)
{
    let answer = [];
    for(let a = 0; a < arr.length; a++)
    { 
        if(arr[a] !== arr[a+1])   
            answer.push(arr[a]); 
    }
    return answer;
}

제거할 때와 달리 추가할 때는 인덱스 a의 값과 a+1의 값이 동일하지 않은 경우 인접한 원소의 중복값이 없는 것으로 보아 a의 값을 새로운 배열에 추가시킨다

 

이용했던 메서드

- push : 배열에 새로운 값을 추가하는 메소드

push(추가할 값)을 입력하면 새로운 배열(여기서는 answer)에 값이 추가된다.

 


풀이를 확인하니 화살표 함수로 풀이하신 분들이 많이 있었는데 이 부분 화살표 함수로도 한번 만들어봐야겠다 !

728x90
반응형