[Programmers 알고리즘][77484] 로또의 최고 순위와 최저 순위

2021. 5. 1. 18:22Algorithm

반응형

문제 설명

level 1
2021 Dev-Matching: 웹 백엔드 개발자(상반기)

구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

  • 알아볼 수 없는 번호를 0으로 표기합니다.
  • 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.

순위당첨 내용

1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외

제한사항

  • lottos는 길이 6인 정수 배열입니다.
  • lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    • 0은 알아볼 수 없는 숫자를 의미합니다.
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    • lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
  • win_nums은 길이 6인 정수 배열입니다.
  • win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
    • win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

입출력 예

lotto swin_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

 


문제 풀이

  1. 최고 순위(= 0 값이 모두 일치) : 일치하는 번호 수 + 0의 개수
  2. 최저 순위(= 0 값이 모두 불일치) : 일치하는 번호 수

Check Point

딱히 없지만.... 굳이 뽑자면...

번호 일치 여부는 순서와 상관 없다.

 

Code

function solution(lottos, win_nums) {
    let zeroCnt = 0;
    let correct = 0;
    lottos.forEach((num, i) => {
        if(num === 0) zeroCnt++;
        else {
            const idx = win_nums.indexOf(num);
            if (idx >= 0) {
                correct++;
            }
        }
    });
    
    let best = Math.min(7 - (correct + zeroCnt), 6);
    let worst = Math.min(7 - correct, 6);
    
    return [best, worst];
}

 

반응형