프로그래머스 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;
}
'[프로그래머스]' 카테고리의 다른 글
[js] 프로그래머스 - 이진 변환 반복하기 (0) | 2022.09.08 |
---|---|
[js] 프로그래머스 - 소수 찾기 (0) | 2022.08.31 |
[js] 프로그래머스 - 시저 암호 (0) | 2022.08.29 |
[js] 프로그래머스 - 성격 유형 검사하기 (0) | 2022.08.26 |
댓글