자료구조, 알고리즘
[프로그래머스] 로또의 최고 순위와 최저 순위 - 자바스크립트
개발공주
2021. 11. 27. 23:16
728x90
1. 접근 방법
(1) lottos에서 win_nums랑 일치하는 숫자의 갯수가 n이라면, 최소 정답은 n개, 최대 정답은 n + (0의 갯수)다.
(2) 0의 갯수 구하기
const numOfZeros = lottos.filter(lotto => lotto === 0).length;
(3) 최소, 최대 정답 수 구하기
let minCorrect = 0;
for (let i = 0; i < lottos.length; i++) {
if (win_nums.includes(lottos[i])) {
minCorrect++;
}
}
let maxCorrect = minCorrect + numOfZeros;
(4) 로또순위 계산 로직 작성
const setGrade = (corrects) => {
if (corrects >= 6) {
return 1;
} else if (corrects <= 1) {
return 6;
} else {
return 7 - corrects;
}
}
(5) 최대, 최소 일치 갯수로 로또순위 계산하여 정답 리턴
return [setGrade(maxCorrect), setGrade(minCorrect)];
2. 해답
const setGrade = (corrects) => {
if (corrects >= 6) {
return 1;
} else if (corrects <= 1) {
return 6;
} else {
return 7 - corrects;
}
}
function solution(lottos, win_nums) {
if (lottos.sort() == win_nums.sort()) return [1, 1];
// 1. lottos에서 0의 개수 세기.
const numOfZeros = lottos.filter(lotto => lotto === 0).length;
// 2. lottos 하나씩 돌면서 최소 결과 구하기
let minCorrect = 0;
for (let i = 0; i < lottos.length; i++) {
if (win_nums.includes(lottos[i])) {
minCorrect++;
}
}
// 3. 최대 결과 구하기
let maxCorrect = minCorrect + numOfZeros;
return [setGrade(maxCorrect), setGrade(minCorrect)];
}
소감: 난 이렇게까지 구구절절해야 하나ㅎ
728x90