728x90
[문제]
[풀이 코드]
function solution(lottos, win_nums) {
var answer = [];
let collect = 0;
for(let i = 0; i < win_nums.length; i++){
let check = win_nums.find((num)=> num == lottos[i]);
if(check){
collect++;
}
}
const zeronum = lottos.filter((num) => num == 0);
let min = 7-collect >= 6 ? 6 : 7-collect;
let max = min-zeronum.length <= 1 ? 1 : min-zeronum.length;
answer = [max, min]
return answer;
}
[해설]
우선 win_nums에 lottos가 0을 제외하고 몇개나 맞췄는지 확인을 해야한다. 그러기 위해서 for문을 돌리고, win_nums에 find를 하여서 lottos가 몇개나 맞췄는지 맞췄으면 collect가 하나씩 올라가게끔 하였다. 그렇게 최소 몇개 맞췄는지 확인했으면 0의 개수를 확인 해야하는데 find는 조건에 맞는 수 하나만 찾지만 filter의 경우 조건의 맞으면 다 가져온다. 그래서 우리는 filter를 사용하였고, 0이 총 몇개인지는 zeronum의 length로 확인할 수 있다. 이제 최소순위와 최대순위를 계산하면 되는데 1등부터 6등까지 전부다 합산한 경우가 7 - 맞춘 갯수이다. 예를들어 1개를 맞췄으면 6등 2개는 5등 이런식으로 예외적으로 0개를 맞추면 7등이 되므로 이 경우에만 6등으로 고정시켜주면 최소순위를 해결 할 수 있다. 최대 순위의 경우 최소 순위에서 뽑아온 0의 길이만큼을 빼주면 최대 순위가 되고, 이를 answer에 담아주면 문제를 해결 할 수 있다.
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS] 체육복 (0) | 2024.06.28 |
---|---|
[프로그래머스/JS] 숫자 짝꿍 (0) | 2024.06.27 |
[프로그래머스/JS] 기사단원의 무기 (0) | 2024.06.24 |
[프로그래머스/JS] 덧칠하기 (0) | 2024.06.21 |
[프로그래머스/JS] 소수 만들기 (0) | 2024.06.20 |