본문 바로가기
공부/알고리즘&코딩테스트

[프로그래머스 lv1] 로또의 최고 순위와 최저 순위 JS

by 야옹아옹 2021. 8. 17.
별거 없고 그냥 풀면서 생각했던 걸 끄적입니다.

😶 생각해보기

최고 순위와 최저 순위를 만들어 주면된다.

민우가 당첨된 숫자들의 개수를 알아낸다.

ex) [1,2,3,4,5,6]이 당첨 숫자고 민우가 산 로또가 [1,2,9,7,0,0]이라면 당첨된 숫자는 [1,2]로 2개

 

최고 순위 = 민우가 가진 0의 개수 + 민우가 맞춘 로또 개수

최저 순위 = 민우가 맞춘 로또 개수

🤔 코드 생각해보기

현재 당첨된 숫자의 개수를 어떻게 구할 것인가?

당첨 배열에 forEach를 사용해서 해당 숫자가 민우의 로또에 includes라면 count++;

 

현재 민우가 가진 0의 개수를 어떻게 구할 것인가?

민우 배열에 forEach를 사용해, 해당 숫자가 0이라면 unknownNumber++;

 

최고 순위

7 - ( 당첨된 숫자 + 0의 개수 ) ex) 7 - ( 2 + 2 ) = 3등.

7인 이유는 0위부터 시작하는게 아니기 때문에 6에 +1을 해줬다. 는 얘도 에러가 났다.

보니까 0이없고 당첨된 숫자가 없다면 얘도 7등이 찍혀버린다. 6등이 최대인데!

그래서 7이되버리면 6을 반환하도록 삼항연산자를 사용했다!

 

최저 순위

7 - 당첨된 숫자  ex) 7 - 2 = 5등

단 위에처럼 했더니 6자리 모두 0일 경우 에러가 발생했다. 왜냐면 count가 ++이 되지않았기 때문에

뺄 숫자가 없어서 6등인데 7이 넘어가 최저 순위가 7로 찍히기 때문이다..

3항 연산자를 넣어서 만약 6자리 모두 0일 경우 6등으로 찍히도록 설정해줬다.

 

코드

function solution(lottos, win_nums) {
    // 현재 지워지지 않는 숫자들 중에 당첨된 숫자의 개수를 구한다
    let count=0;
    win_nums.forEach((num)=>{
        if(lottos.includes(num)) count++;
    })
    // 민우가 가진 지워진 숫자의 개수
    let unknownNumber = 0; 
    lottos.forEach((num)=>{
        if(num === 0) unknownNumber++;
    })
    const min = 7 - count;
    const max = 7 - count - unknownNumber;


    var answer = [max === 7 ? 6 : max , min === 7 ? 6 : min];
    console.log(answer)
    return answer;
}

🎶 리뷰

좀 더 다양한 케이스를 생각하고 코드를 만들어야겠다.

다른 사람들 후기를 보니까 switch문도 많이 사용하고

리듀서도 사용하고 .. 정말 풀이 방법은 많구나 includes는 배열 크기가 커지면 엄청 오래 걸릴 것같다..

댓글