프로그래머스 2021 Dev-Matching 문제
6자리 로또 번호와 그리고 몇 자리가 지워진 6자리 번호가 있다.
지워진 번호를 임의로 채워서 최고로 받을 수 있는 순위와 최저로 받을 수 있는 순위 구하기
자세한 설명은 위 링크 참고!
일단 lottos
와 win_nums
의 같은 값의 개수가 몇 개인지 찾는다. 찾은 수는 지워진 부분이 모두 틀렸을 때와 같으니 최저 순위를 판별할 수 있고 지워진 부분이 모두 맞은 때가 최고 순위이니 지워진 부분(숫자 0)의 개수를 더하면 최고 순위가 된다.
즉
function solution(lottos, win_nums) {
const answer = [];
let win_counter = 0;
let zero_counter = 0
const win_ranking= [6,6,5,4,3,2,1]
lottos.map((num)=>{
if(num===0){
zero_counter++
}else{
win_nums.map((win_num)=>{
if(num===win_num){
win_counter++
}
})
}
})
answer[0] = win_ranking[win_counter + zero_counter]
answer[1] = win_ranking[win_counter]
return answer;
}
간단한 변수 선언부분은 패스한다.
const win_ranking= [6,6,5,4,3,2,1]
계산하여 나온 수를 로또의 순위로 바꾸기 위한 배열
lottos.map((num)=>{
if(num===0){
zero_counter++
}else{
win_nums.map((win_num)=>{
if(num===win_num){
win_counter++
}
})
}
})
map 함수를 사용하여 0이면 zero_counter에 +1하고 아니면 win_nums에서 찾은 숫자가 있는지 확인하여 win_counter +1한다.
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1];
let minCount = lottos.filter(v => win_nums.includes(v)).length;
let zeroCount = lottos.filter(v => !v).length;
const maxCount = minCount + zeroCount;
return [rank[maxCount], rank[minCount]];
}
filter를 사용하여 보기 좋고 깔끔하게 구현되어 있길래 가져왔다.
이분의 코드를 맵을 2중으로 사용한 부분을includes
를 사용하면 더 깔끔하게 코드를 작성할 수 있겠다는 생각이 들었다.