로또의 최고 순위와 최저 순위 (Lv.1)
문제 설명
- 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수
- 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return
- 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정
- 알아볼 수 없는 번호를 0으로 표기
순위 | 당첨 내용 |
---|---|
1 | 6개 번호가 모두 일치 |
2 | 5개 번호가 일치 |
3 | 4개 번호가 일치 |
4 | 3개 번호가 일치 |
5 | 2개 번호가 일치 |
6(낙첨) | 그 외 |
제한사항
- lottos는 길이 6인 정수 배열
- lottos의 모든 원소는 0 이상 45 이하인 정수
- 0은 알아볼 수 없는 숫자
- 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않음
- lottos의 원소들은 정렬되어 있지 않을 수도 있음
- win_nums은 길이 6인 정수 배열
- win_nums의 모든 원소는 1 이상 45 이하인 정수
- win_nums에는 같은 숫자가 2개 이상 담겨있지 않음
- win_nums의 원소들은 정렬되어 있지 않을 수도 있음
입출력 예시
lottos | win_nums | result |
---|---|---|
[44, 1, 0, 0, 31, 25] | [31, 10, 45, 1, 6, 19] | [3, 5] |
[0, 0, 0, 0, 0, 0] | [38, 19, 20, 40, 15, 25] | [1, 6] |
[45, 4, 35, 20, 3, 9] | [20, 9, 3, 45, 4, 35] | [1, 1] |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//로또 순위 코드
function lotto(num) {
let rank = 0;
if (num == 6) {
return (rank = 1);
} else if (num == 5) {
return (rank = 2);
} else if (num == 4) {
return (rank = 3);
} else if (num == 3) {
return (rank = 4);
} else if (num == 2) {
return (rank = 5);
} else {
return (rank = 6);
}
}
//결과 코드
function solution(lottos, win_nums) {
var answer = [];
let num1 = 0;
let num2 = 0;
for (let i = 0; i < lottos.length; i++) {
for (let j = 0; j < win_nums.length; j++) {
if (lottos[i] == win_nums[j]) {
num1++;
}
}
if (lottos[i] === 0) {
num2++;
}
}
num2 += num1;
answer.push(lotto(num1));
answer.push(lotto(num2));
return answer.sort((a, b) => a - b);
}
나름 풀이
- 랭크 먼저 설정(각 점수에 따른 순위)
- 두개의 배열을 비교
- 로또 숫지가 같은 경우
- 내가 가진 숫자가 0인 경우
- 1번의 결과 + 2번의 결과 = 로또 숫자가 같거나 내가 가진 숫자가 0인 경우
- 두가지를 각각 answer에 push 해줌
다른 분의 풀이(이해가 잘 되었던 코드 중 제일 간결했던 코드)
1
2
3
4
5
6
7
8
9
10
function solution(lottos, win_nums) {
const answer = [];
const min = lottos.filter((n) => win_nums.includes(n)).length;
const max = lottos.filter((n) => n === 0).length + min;
max > 1 ? answer.push(7 - max) : answer.push(6);
min > 1 ? answer.push(7 - min) : answer.push(6);
return answer;
}
위 풀이에 대한 설명
- 최소 값 : 로또 번호(win_nums)가 포함되어있는 배열의 개수(length로)를 구함
- 최대 값 : 최소 값 + 0인 내 숫자의 개수
- 삼항연산자로 ← 랭크 값은 7-1로 설정, 만약에 최소, 최대 값이 1 이하면 낙첨(6) 도출