[프로그래머스/JS] 같은 숫자는 싫어

김재훈·2023년 6월 14일
0

알고리즘 풀이

목록 보기
1/2
post-custom-banner

프로그래머스 고득점 Kit에 스택/큐 유형 문제 중 하나인 같은 숫자는 싫어 풀이입니다.
문제 풀러가기

JavaScript를 이용해 풀었습니다.

문제 설명

배열 arr이 주어지면 연속으로 등장하는 숫자를 제거합니다.
예를 들어 arr = [1,1,3,3,0,1,1]과 같은 배열이 주어졌다면 결과값은 answer = [1,3,0,1] 형태로 반환해야 합니다.

나의 풀이

arr을 순회하며 현재 회차의 숫자가 다음 회차의 숫자와 일치한다면 아무 동작도 하지 않고, 다를 때만 answer에 값을 추가하도록 했습니다.

이를 순서대로 정리해보면 다음과 같습니다.
1. 현재값을 저장하는 변수 currentNum 선언
2. arr을 순회하는 반복문 작성
1. 다음 루프의 값이 curretNum과 같다면 아무 동작도 하지 않음
2. 다음 루프의 값이 currentNum과 다르다면 현재 currentNum을 answer 배열에 추가 후 currentNum을 새 값으로 재할당
3. 마지막 요소는 비교 작업을 수행하지 않기 때문에 가장 마지막 요소를 answer 배열에 추가하고 프로그램 종료

이를 코드로 표현하면 다음과 같이 작성할 수 있습니다.

function solution(arr)
{
    var answer = [];
    let currentNum = arr[0];

    for (let item of arr) {
        if (currentNum !== item) {
            answer.push(currentNum);
            currentNum = item;
        }
    }
    
    answer.push(arr[arr.length - 1]);
    
    return answer;
}

가장 효율적인 풀이를 보고 배우기

프로그래머스에서는 문제를 다 풀었을 때 다른 사람의 풀이를 볼 수 있는 기능을 제공하고 있습니다.
이를 이용해 가장 많은 좋아요를 받은 풀이를 보며 개선점을 찾을 수 있습니다.

function solution(arr)
{
    return arr.filter((val,index) => val != arr[index+1]);
}

위 코드를 보면 filter 메서드를 이용해 값을 비교하고 있습니다.
현재 값과 다음 값을 비교하는 로직이라는 점에서 접근 방식은 비슷했으나, index 인자를 같이 전달하여 별도의 변수 선언 없이 다음 요소의 값을 구했습니다.

또한 마지막 요소 문제도 마지막 index에서 +1을 하면 undefined가 반환되는 것을 이용하여 해결했기 때문에 별도 작성 없이 해결이 가능합니다.

profile
개발하면서 새롭게 배운 내용, 시행착오한 내용들을 잊지 않기 위해 기록합니다.
post-custom-banner

0개의 댓글