문제
https://school.programmers.co.kr/learn/courses/30/lessons/77484
- 1~45까지의 숫자 중 6개의 숫자를 맞추면 1등인 로또게임이 있다.
- 추측한 로또 번호 배열과, 추첨된 번호 배열이 주어진다.
- 추측한 로또 번호 배열에는 몇 개의 숫자가 0으로 초기화 되어있고, 0으로 초기화된 숫자까지 맞혔을 때의 순위(최고 순위) 와, 둘 다 틀렸을 때의 순위(최저 순위)를 예측해서 리턴하는 문제
풀이
function solution(lottos, win_nums) {
// 조금이라도 빨리 탐색하라고 두 배열 모두 오름차순 정렬해봤습니다.
let lotto = lottos.slice().sort((a, b) => a - b);
let wins = win_nums.slice().sort((a, b) => a - b);
// 0의 갯수
let myCnt = lotto.filter(el => !el).length;
// 0을 제외한 나머지 숫자 중 맞은 갯수
let corrects = lotto.filter(el => wins.includes(el)).length;
// 최고 순위는 내 로또 중 0을 추첨 번호라고 가정하기 때문에 0의 갯수 + 맞은 갯수를 계산합니다.
let allCorrect = myCnt + corrects;
// 최저순위는 맞은 갯수가 0이나 1이라면 확정적으로 6위이고, 나머지라면 7 - 맞은 갯수를 하여 구할 수 있습니다.
let lowest = corrects <= 1 ? 6 : 7 - corrects;
// 최고순위도 모든 맞은 갯수를 계산했을 때 0이나 1이라면 확정적으로 6위이고 아니라면 7 - 맞은 갯수 입니다.
let highest = allCorrect <= 1 ? 6 : 7 - allCorrect;
// 순서에 맞게 리턴합니다.
return [highest, lowest];
}
const res = solution([45, 4, 35, 20, 3, 9], [20, 9, 3, 45, 4, 35]);
console.log(res);
- 첫 번째 풀이는 filter 메서드를 사용해서 0의 갯수, 추측한 로또에서 맞힌 갯수를 구했고, 0의 갯수만큼 맞힌 숫자를 포함한 경우와 포함하지 않은 경우의 순위를 계산해서 리턴했다.
- 굳이 filter를 두 번 사용하지 않고도, for문을 돌면서 0과 1을 구분해 카운팅을 하고, 이 갯수를 이용해 구하는 로직도 있다.
- 참고한 다른 레퍼런스 코드에서는 순위를 굳이 7에서 뺀 값으로 구하지 않고, 배열을 만들어서 풀기도 한다...!
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘 JS] 성격 유형 검사하기 (프로그래머스 Lv.1) (0) | 2023.01.15 |
---|---|
[알고리즘 JS] 숫자 짝꿍 (프로그래머스 Lv.1) (1) | 2023.01.02 |
[알고리즘 JS] 다트 게임 (프로그래머스 Lv.1) (0) | 2022.11.15 |
[알고리즘 JS] 쇠막대기 (Stack) (0) | 2022.09.24 |
[알고리즘 JS] 크레인 인형뽑기 게임 (프로그래머스 Lv.1) (2) | 2022.09.22 |