본문 바로가기
[프로그래머스]

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

by 쥰5017 2022. 9. 8.

프로그래머스 lv1 로또 예상 순위 출력하기

 

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

 

로또에 낙서를 하여 알아볼 수 없는 번호는 0으로 표기하고 보이는 번호로 추측하여 당첨 가능한 최고 순위와 최저 순위를 출력하는 문제이다.

 

예시)

당첨 번호 : 1, 6, 10, 19, 31, 45

구입한 로또 번호 : 0, 0, 1, 25, 31, 44

이때 알 수 없는 번호를 제외한 4개의 숫자 중에서 1과 31이 일치한 상황이므로 알 수 없는 번호가 모두 불일치할 경우 최소 [2개 번호 일치 > 5등] 알 수 없는 번호가 모두 일치할 경우 최대 [4개 번호 일치 > 3등]으로 추측할 수 있다.

따라서 출력값은 [3, 5]이다.

입출력 ▽

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]

 

1) 우선 로또를 맞춘 번호의 개수, 추측할 번호의 개수를 각각 카운트하기 위해 변수 2개를 선언하고, 맞춘 개수에 따른 등수를 출력하기 편하도록 등수 배열 [6, 6, 5, 4, 3, 2, 1]을 생성한다. 맞춘 번호의 개수가 그대로 배열의 index가 되어 출력하기 편하다.

 

var hitnum = 0;
var guessnum = 0;
var rank = [6, 6, 5, 4, 3, 2, 1];

 

 

2) lottos 배열을 for문에 돌려 lottos 배열이 가진 숫자가 win_nums에 포함되어있는지(포함되었다면 맞춘 번호 개수 + 1) lottos 배열이 가진 숫자가 0인지(0이라면 추측 번호 개수 +1) 검사한다.

 

for (let i = 0; i < lottos.length; i++) {
        hitnum += (win_nums.includes(lottos[i])) ? 1 : 0;
        guessnum += (lottos[i] == 0) ? 1 : 0;
        }
    }

 

 

3) 마지막으로 맞춘 개수가 가장 적은 경우(보이는 숫자만 맞춘 경우)와 맞춘 개수가 가장 많은 경우(보이는 숫자와 추측할 숫자가 모두 맞은 경우)의 등수를 정답 배열에 넣어준다.

 

answer.push(rank[hitnum + guessnum], rank[hitnum]);

 

 

 

마무리.

function solution(lottos, win_nums) {
    var answer = [];
    var hitnum = 0;
    var guessnum = 0;
    var rank = [6, 6, 5, 4, 3, 2, 1];
    
    for (let i = 0; i < lottos.length; i++) {
        hitnum += (win_nums.includes(lottos[i])) ? 1 : 0;
        guessnum += (lottos[i] == 0) ? 1 : 0;
        }
    }
    
    answer.push(rank[hitnum + guessnum], rank[hitnum]);
    
    return answer;
}

 

댓글