저장을 습관화

프로그래머스 LV.1 같은 숫자는 싫어 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.1 같은 숫자는 싫어

ctrs 2023. 10. 2. 18:25

프로그래머스 LV.1 같은 숫자는 싫어

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

같은 숫자는 싫어


2. 문제 설명

배열 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 함수를 완성해 주세요.


3. 제한 사항

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


4. 예시

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


5. 기본 제공 코드

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

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


6. 제출한 내 답

const solution = (arr) => {
  return arr.filter((v, i) => {
    return v === arr[i - 1] ? false : true;
  });
};
정확성  테스트
테스트 1 〉	통과 (0.05ms, 33.6MB)
테스트 2 〉	통과 (0.05ms, 33.5MB)
테스트 3 〉	통과 (0.05ms, 33.4MB)
테스트 4 〉	통과 (0.05ms, 33.5MB)
테스트 5 〉	통과 (0.05ms, 33.5MB)
테스트 6 〉	통과 (0.05ms, 33.4MB)
테스트 7 〉	통과 (0.05ms, 33.4MB)
테스트 8 〉	통과 (0.06ms, 33.4MB)
테스트 9 〉	통과 (0.05ms, 33.5MB)
테스트 10 〉	통과 (0.05ms, 33.4MB)
테스트 11 〉	통과 (0.05ms, 33.4MB)
테스트 12 〉	통과 (0.05ms, 33.4MB)
테스트 13 〉	통과 (0.07ms, 33.5MB)
테스트 14 〉	통과 (0.05ms, 33.5MB)
테스트 15 〉	통과 (0.05ms, 33.6MB)
테스트 16 〉	통과 (0.05ms, 33.5MB)
테스트 17 〉	통과 (0.04ms, 33.5MB)
효율성  테스트
테스트 1 〉	통과 (27.00ms, 83.1MB)
테스트 2 〉	통과 (23.60ms, 83.3MB)
테스트 3 〉	통과 (24.19ms, 83.4MB)
테스트 4 〉	통과 (27.29ms, 83.2MB)
채점 결과
정확성: 71.9
효율성: 28.1
합계: 100.0 / 100.0

 

6-2. VSC에 작성한 내용

const solution = (arr) => {
  return arr.filter((v, i) => {
    return v === arr[i - 1] ? false : true;
  });
};

// 테스트
console.log(solution([1, 1, 3, 3, 0, 1, 1]));
console.log(solution([4, 4, 4, 3, 3]));


7. 특이사항

틀렸던 방법

const solution = (arr) => {
  return arr.filter((v, i) => {
    return v === arr[i - 1] ? false : v;
  });
};

arr의 요소 중 하나가 0일때 v(현재 요소)를 반환하도록 하면

0, 즉 falsy한 값으로 인식되어 filter가  drop 시켜 버렸다

 


8. 다른 사람이 작성한 답

8-1. 가장 많이 쓰인 풀이법, 좋아요를 가장 많이 받은 풀이법

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

배열의 다음 수와 비교를 했네

 

8-2. for문, 흐름은 나와 같음

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

    for (let i=1; i<arr.length; i++) {
        if (answer[answer.length - 1] !== arr[i]) {
            answer.push(arr[i]);
        }
    }

    return answer;
}