티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/77484
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
해결방법
1. 최고로 많이 맞힌 개수와 최저로 맞힌 개수가 담긴 배열을 만든다
2. 그 배열에 든 숫자를 차례로 비교하여 6이면 1을 answer에 push, ~ 1이면 6을 push한다
풀이
function solution(lottos, win_nums) {
var same = [0, 0]; //[최고순위, 최저순위]
var answer = [];
for (let i of lottos) {
if (win_nums.includes(i)) {same[0]++; same[1]++;}
if (i === 0) same[0]++;
}
for (num of same) {
if (num === 6) answer.push(1);
else if (num === 5) answer.push(2);
else if (num === 4) answer.push(3);
else if (num === 3) answer.push(4);
else if (num === 2) answer.push(5);
else answer.push(6);
}
return answer;
}
배운 점
1. else if를 다 돌 필요가 없다면 switch
다른 사람들의 풀이를 보다 switch를 사용한 코드를 발견했다
생각해보니 내가 짠 코드는 else if가 여러개인데 첫 번째 else if를 만족해도 마지막 else if 까지 다 돌아야 한다는 단점이 있었다
switch를 사용한다면 만족하는 라인에서 braek로 멈추기 때문에 시간을 더 절약할 수 있겠다는 생각이 들었다
switch를 사용해 다시 짠 코드는 다음과 같다
function solution(lottos, win_nums) {
var same = [0, 0];
var answer = [];
for (let i of lottos) {
if (win_nums.includes(i)) {same[0]++; same[1]++;}
if (i === 0) same[0]++;
}
for (num of same) {
switch (num) {
case 6:
answer.push(1);
break;
case 5:
answer.push(2);
break;
case 4:
answer.push(3);
break;
case 3:
answer.push(4);
break;
case 2:
answer.push(5);
break;
default:
answer.push(6);
break;
}
}
return answer;
}
2. 7에서 뺀 값
단순하게 6개면 1, 5개면 2, 4개면 3.. 이런식으로 if문이나 switch를 이용할 수도 있으나 더 간단한 방법을 고민해봤다
규칙을 살펴보니 6개부터 2개까지는 7에서 뺀 값을 push하면 된다는 것을 발견했다
1개보다 많으면 7에서 뺀 값을 push하고 그렇지 않다면 6을 push하여 다음과 같이 전체적인 코드 길이를 줄였다
function solution(lottos, win_nums) {
var same = [0, 0];//[최고순위, 최저순위]
var answer = [];
for (let i of lottos) {
if (win_nums.includes(i)) {same[0]++; same[1]++;}
if (i === 0) same[0]++;
}
for (num of same) {
num > 1 ? answer.push(7 - num) : answer.push(6);
}
return answer;
}
3. 센스있는 배열로
rank = [6, 6, 5, 4, 3, 2, 1] 를 선언하여 만약 숫자가 3이라면 rank[3]인 4를 출력하는 방법도 있었다
function solution(lottos, win_nums) {
var same = [0, 0];//[최고순위, 최저순위]
var rank = [6, 6, 5, 4, 3, 2, 1];
for (let i of lottos) {
if (win_nums.includes(i)) {same[0]++; same[1]++;}
if (i === 0) same[0]++;
}
return [rank[same[0]],rank[same[1]]];
}
'JS-algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 (javascript) (0) | 2022.07.01 |
---|---|
[프로그래머스] 약수의 개수와 덧셈 (javascript) (0) | 2022.06.21 |
[프로그래머스] 내적 (javascript) (0) | 2022.06.11 |