https://programmers.co.kr/learn/courses/30/lessons/77484
풀이
일치하는 번호의 배열 cor_list와 가려져 보이지 않는 배열 zero_list를 만들었다.
win_nums에 대한 forEach 메소드로 값과 인덱스를 불러왔다.
그리고 lottos 배열에도 들어있는 숫자들을 cor_list에 넣었다.
lottos의 가려진 숫자 0은 zero_list에 넣었다.
최고 순위는 cor_list의 길이 + zero_list의 길이,
최저 순위는 cor_list의 길이에 의해 결정된다.
따라서 switch문을 사용하여 최고 순위를 결정하는 값의 case에 따라 answer에 최고 순위 등수를 매기고,
7개의 등수(1,2,3,4,5,6,6에 해당)에서 cor_list의 길이 값을 빼는 것을 삼항 연산자로 처리하여 최저 순위를 매겼다.
function solution(lottos, win_nums) {
var answer = [];
var cor_list = [];
var zero_list = [];
win_nums.forEach((nums,i)=>{
if(lottos.includes(nums) === true){
cor_list.push(nums);
}
if(lottos[i] === 0){
zero_list.push(lottos[i]);
}
});
switch(cor_list.length + zero_list.length){
case 6:
answer.push(1,7-cor_list.length === 7 ? 6:7-cor_list.length);
break;
case 5:
answer.push(2,7-cor_list.length === 7 ? 6:7-cor_list.length);
break;
case 4:
answer.push(3,7-cor_list.length === 7 ? 6:7-cor_list.length);
break;
case 3:
answer.push(4,7-cor_list.length === 7 ? 6:7-cor_list.length);
break;
case 2:
answer.push(5,7-cor_list.length === 7 ? 6:7-cor_list.length);
break;
default:
answer.push(6,6);
}
return answer;
}
다른 사람의 풀이
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]];
}
먼저 rank 리스트를 만들어 마지막에 인덱스로 순위를 찾을 수 있게 하였다.
minCount는 filter 메소드로 lottos와 win_nums에 모두 존재하는 값만 남겼고,
zeroCount에는 !v인 값을 남기도록 하였는데,
보통 0이 아닌 수는 !숫자 = false이다.
따라서 !숫자 = true인 유일한 숫자인 0을 남기도록 하였다.
그렇게 만든 배열로 최고 순위와 최저 순위를 rank에 인덱스로 사용하여 구한다.
끝!
이 분이 작성한 코드의 rank처럼 간단하게 순위를 구할 수 있었지만
코드를 간결하게 작성하려면 되도록 메소드를 사용해야 한다는 내 생각이 오히려 코드를 길게 쓰게 하는 이유인 것 같다.
앞으로는 여러 방면으로 열어두고 생각해야겠다.
'IT > Algorithm' 카테고리의 다른 글
Big - O Notation) 빅오 표기법과 시간 복잡도 (0) | 2021.09.29 |
---|---|
프로그래머스) 내적 (0) | 2021.07.06 |
프로그래머스) [1차] 비밀지도 (0) | 2021.07.05 |
프로그래머스) 음양 더하기 (0) | 2021.07.05 |
프로그래머스) 모의고사 (0) | 2021.07.01 |