본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 같은 숫자는 싫어 문제 풀이 및 설명 - 자바스크립트[JAVASCRIPT]

by 레일라오리덕 2021. 4. 28.
728x90

programmers.co.kr/learn/courses/30/lessons/12906?language=javascript

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

문제

 

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

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

 

제한 사항

 

 

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

 

결괏값 예시

 

 

arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

 

기본 제공 틀

 

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

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    console.log('Hello Javascript')
    
    return answer;
}

 

풀이 [JavaScript]

 

안녕하세요, 오늘은 프로그래머스 스킬체크 레벨 1의 문제인 같은 숫자는 싫어 문제풀이를 해보겠습니다.

저는 처음에 indexOf라는 메서드를 써서 단순히 중복되는 모든 값을 제거하려고 했었는데요, 문제를 자세히 다시 들여다보니 모든 중복되는 값을 제거하는 것이 아닌 값의 앞뒤로 인접한 값들을 제거하는 문제였습니다.

그래서 결국 for문을 돌면서 모든 값들을 확인해주었습니다.

우선 arr배열의 0번째 값에서부터 arr의 길이까지 체크하여 arr[i]와 arr[i+1]을 비교하여 같지 않은 경우에만 answer라는 배열이 추가(push)해주었습니다.

 

728x90

 

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

다른 사람의 풀이를 들어가보니 이렇게 간단하게 단 4줄로 코드를 짜신 분들이 있더라구요.

filter함수의 사용법을 자세히 모르던 제가 조금 공부할 수 있는 좋은 기회였습니다.

 

우선 filter함수는 callbakcFunction의 조건에 해당하는 모든 요소가 있는 배열을 새로 생성하는 기능을 합니다.

arr.filter(callbackFunctioni(element, index, array), thisArg)의 형식인데요.

아래에서 해결하신 방법은 arr배열을 filter함수가 돌면서 element에 해당하는 값인 val과 해당 val의 index+1의 값을 구해서 val과 그리고 val 다음 index에 있는 val값을 비교하여 같지않은 경우에 해당하는 값들만 반환하도록 설계를 해놓으신 것 같습니다.

 

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

채점 결과 [JavaScript]

 

728x90

댓글