본문 바로가기
알고리즘 문제/프로그래머스_Lv1 도장깨기

[프로그래머스] 로또의 최고 순위와 최저 순위 (Javascript)

by 스코필 2024. 12. 25.

문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

로또는 1부터 45까지 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 로또의 순위를 정하는 방식은 다음과 같습니다.

순위 당첨 내용
1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(닥첨) 그 외

 

민우는 로또를 확인하고 싶었지만, 일부 번호가 낙서되어 알아볼 수 없게 되었습니다. 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 알아볼 수 없는 번호를 0으로 표기한다고 가정할 때, 민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_num가 매개변수로 주어집니다. 이 때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 리턴하도록 함수를 완성하세요. 

제한 사항

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

 

✅ Code - 성공

function solution(lottos, win_nums) {
    const lotto_rank = { 6 : 1, 5 : 2, 4 : 3, 3 : 4, 2 : 5, 1 : 6, 0 : 6}
        
    let max_cnt = 0, min_cnt = 0;
    for (let num of win_nums) {
        if (lottos.includes(num)) {
            max_cnt++;
            min_cnt++;
        }
    }
    max_cnt += lottos.filter(e => !e).length;    // 알아볼 수 없는 번호(0)를 최고 순위에 더하기       
    
    return [lotto_rank[max_cnt], lotto_rank[min_cnt]];
}