https://programmers.co.kr/learn/courses/30/lessons/77484
- 민우 동생이 로또에 낙서를해서 로또 번호 확인을 못한다고 한다.
- 입력에는 0이 포함되는데 0은 어떤 숫자도 될 수 있다 (조커카드)
- 만약 0이 다른수가 될 때 최고순위와 최저순위를 출력하면 된다.
입력: lottos, win_nums가 매개변수로 입력된다.
- lottos:
- 6자리 배열
- 0 ~ 45의 정수가 입력됨
- 0은 여러개 입력 가능 but, 나머지는 1개만 입력됨
- 원소는 정렬돼 있지 않을 수 있음
- win_nums:
- 6자리 배열
- 1 ~ 45의 정수가 입력됨
- 중복되는 숫자가 없음
- 원소는 정렬돼 있지 않을 수 있음
출력:
[최고순위, 최저순위]
를 출력한다.
이번 문제는 프로그래머스 기준 Level 1문제다.
그래서 큰 어려움 없이 간단하게 풀 수 있었지만 반례 하나를 생각 못해서 시간이 조금 더 걸렸다.
function solution(lottos, win_nums) {
// 정답과 일치하는 갯수
let correctCnt = 0;
// 0의 갯수
let zeroCnt = 0;
// 최저 순위
let minRank = 0;
// 최고순위
let maxRank = 0;
lottos.forEach (v => {
if (win_nums.includes(v)) {
correctCnt ++;
}
if (v === 0) {
zeroCnt ++;
}
});
minRank = Math.abs(correctCnt - 7);
maxRank = minRank - zeroCnt;
minRank = minRank > 6 ? 6 : minRank;
maxRank = maxRank > 6 ? 6 : maxRank;
return [ maxRank, minRank ];
}
여기서 중요한 부분은 lottos의 forEach를 돌고나서
minRank, maxRank를 재할당 하는 부분이다.
minRank는 0 ~ 6까지 나올 수 있다. 그래서 | minRank - 7 |을 하면 최저순위가 된다.
maxRank는 그냥 최저순위에 0의 갯수를 더해주면 된다.
반례는 minRank와 maxRank가 7이되는 경우에 생기게 된다.
그래서 삼항연사자로 처리를 해줬다.