programmers

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

hee0 2022. 8. 12. 14:08
 6자리의 로또의 번호 중 일부를 알아볼 수 없을 때, 최고순위 최저순위 구하기

 

등수

순위당첨 내용

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의 원소들은 정렬되어 있지 않을 수도 있습니다.

나의 풀이

  • 최대 범위 확인
    • 로또 번호 모두 손실된 경우 또는 로또 번호 모두 존재하는 경우
      • 모두 일치 또는 모두 불일치: 1등 ~ 6등
  • 손실된 번호 갯수(zeros)와 일치하는 번호갯수(matches)를 출력
    1. 손실된 번호갯수가 6일 때: 최대 1등, 최소 6등
    2. 손실된 번호갯수가 0일 때: 번호갯수에 해당하는 등수가 당첨등수
      • 등수는 1~6, 로또 수 또한 6개이기에 +1 값인 7 - matches 로 등수처리
    3. 그 외에 해당하는 경우는 switch문을 통해 처리
      • if else 로도 표현가능하나, 조건에 충족할 때까지 모든 조건문을 실행
      • switch는 해당 케이스에 대하여 바로 접근하기 때문에 비용이 훨씬 적음
  • 결과는 최대순위, 최소순위 순으로 전달되어야 하기 때문에 answer.sort()하여 정렬
function solution(lottos, win_nums) {
    
    // 1. 0 카운트와 당첨번호와 일치갯수 -> 최고,최저
    // 2. 0 없으면 매칭수만큼
    var answer = [1, 6];
    
    const zeros = lottos.filter( lt => !lt).length;
    const matches = lottos.filter( lt => win_nums.find( wn => lt === wn)).length;
    if (zeros === 6) {
    
        return [1, 6];
    } else if (zeros === 0) {
        const range = matches ? 7 - matches : 6;
        
        return [range, range];
    } else {
        let min; let max;
        switch(matches) {
            case 5:
                min = 2; max = 1;
                break;
            case 4:
                min = 3; max = 3 - zeros;
                break;
            case 3:
                min = 4; max = 4 - zeros;
                break;
            case 2:
                min = 5; max = 5 - zeros;
                break;
            case 1:
                min = 6; max = 6 - zeros;
                break;
            default:
                min = 6; max = 1;
                break;
        }
        
        return [min, max].sort();    
    }

    return answer.sort();
}

결과

프로그래머스-로또 최고순위와 최저순위-javascript-실행결과