코딩테스트 연습2 -아름다운 연도

KIMMY·2020년 5월 25일
0

코딩테스트연습

목록 보기
2/7

문제:
아름다운 연도란 2018, 1985 와 같이 반복 수가 없는 연도.
1996, 2020 등은 아름답지 않다.
제시되는 연도(p)뒤에 나올 아름다운 연도를 리턴하게 하라.

예 1) p = 2017 , answer = 2018
예 2) p = 2000 , answer = 2013

제한) 제시되는 연도는 1000보다 크고 10000보다 작다.

나의 답:

function solution(p)
{
    var answer = 0;
    function beautyOrnot(year){
        let A = year.toString().split('');
        let sorted_arr = [...new Set (A)];
        if(sorted_arr.length === 4){
            return sorted_arr;
        }else{
            return false;
        }
    };
    for (let i = p+1; i < 10000 ; i++){
        let output = beautyOrnot(i);
        if(output){
            answer = i
            break;
        }
    }
    
      return answer;
}

제시되는 연도 뒤에 나올 아름다운 연도를 구하는 것이기 때문에 for문에서 P +1된 연도부터 아름다운지 아닌지 구별하는 함수를 만들었다.
연도가 1989 로 들어오면 문자배열로 만들었다.
( 1989 => ["1","9","8","9"] )
그다음 ES6의 Set를 사용했다.

Set는 중복되는 값이 맨 앞의 값만 남기고 나머지 무시한다.

const foo = new Set();
console.log(foo) // Set {}

const bar = new Set([ 1, 9, 8, 9]);
console.log(bar) // Set { 1, 9, 8 }

따라서 중복된 값이 있는 연도가 들어오면 배열의 길이가 줄어든다.

배열의 길이가 4가 아니면 flase가 나오고 계속 반복문이 실행.
배열의 길이가 4라면 해당 배열을 리턴(따라서 true), 반복문을 끝낸다.

코딩테스트 문제 두개밖에 안 풀어봤지만, 배열을 쓸 일이 많은 것 같다. 배열 활용 방법들을 많이 배우게 되서 좋다. :)

profile
SO HUMAN

0개의 댓글