[프로그래머스] 로또의 최고 순위와 최저 순위 (JavaScript)
https://school.programmers.co.kr/learn/courses/30/lessons/77484#
1. includes() 사용 풀이 (풀이 참고)
function solution(lottos, win_nums) {
let rank = [6, 6, 5, 4, 3, 2, 1];
let zero = 0, match = 0;
lottos.forEach((e) => {
if (e === 0) zero++;
else if (win_nums.includes(e)) match++;
});
return [rank[match + zero], rank[match]];
}
코드 해설
- 순위를 뜻하는 배열 rank를 생성해줍니다.
- 0에는 어떤 수가 들어가도 되므로 각각 0개수를 뜻하는 zero변수와 일치하는 숫자 개수를 뜻하는 match변수를 생성하고 초기값 0을 할당합니다.
- lottos배열을 forEach로 순회하면서, e가 0일 경우 zero++
- win_nums가 e를 포함하면 match++를 해줍니다.
- match+zero를 더한 값은 최대로 많이 맞힌 것을 의미하므로 rank의 인덱스에 넣어서 출력해주고 match만 맞힌 경우 최소로 맞힌 것을 의미하므로 rank[match]하여 둘을 배열 형태로 반환해줍니다.
2. if - else 사용 풀이
function solution(lottos, win_nums) {
let highestRank = 1;
let lowestRank = 7;
let zeroCount = 0;
let matchCount = 0;
lottos.forEach((num) => {
if (num === 0) zeroCount++;
else if (win_nums.includes(num)) matchCount++;
});
if (zeroCount === 6) return [highestRank, lowestRank - 1];
else if (matchCount === 0) return [lowestRank - 1, lowestRank - 1];
return [lowestRank - (matchCount + zeroCount), lowestRank - matchCount];
}
코드 해설
- 처음 풀었던 코드
- 1번 풀이와 크게 다르지 않지만 if, else if 를 통해 모두 0인 경우, 모두 틀린 경우에 한번 더 예외처리를 해 주는 것이 다른 점입니다.
- 또한 마지막 return문에서도 순위를 출력하기 위해 각각 값을 빼줍니다.
3. filter() 사용 풀이 (ChatGPT 참고)
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1];
let matchCount = lottos.filter(num => win_nums.includes(num)).length;
let unknownCount = lottos.filter(num => num === 0).length;
const maxRank = matchCount + unknownCount;
const minRank = matchCount;
return [rank[maxRank], rank[minRank]];
}
코드 해설
- 1번과 같이 rank를 저장한 배열을 먼저 생성해줍니다.
- filter를 통해 lottos의 win_nums에 포함된 num만 넣어 반환해주고, 이 길이를 구해 matchCount 변수에 저장합니다.
- 마찬가지로 filter를 통해 0인 num만 넣어 반환된 배열 길이를 unknownCount 변수에 저장합니다.
- maxRank는 맞힌숫자와 0인 숫가 갯수를 합한 값, minRank에는 맞힌 숫자만 저장합니다.
- rank배열에 각각 maxRank, minRank를 인덱스로 넣어 반환해줍니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 내 마음대로 정렬하기 (JavaScript) (0) | 2024.01.17 |
---|---|
[프로그래머스] 이상한 문자 만들기 (JavaScript) (0) | 2023.06.20 |
[프로그래머스] 나누어 떨어지는 숫자 배열 (JavaScript) (0) | 2023.06.18 |
[프로그래머스] 가운데 글자 가져오기 (JavaScript) (0) | 2023.06.18 |
[프로그래머스] 음양 더하기 (JavaScript) (1) | 2023.06.14 |