https://programmers.co.kr/learn/courses/30/lessons/77484
훔,,, 효율성은 떨어지는 코드지만,, 그래도 풀었다..!
✨ 이해
0은 알아볼 수 없는 숫자
로또가 당첨 될 수 있는 최고 순위와 최저 순위를 배열로 리턴
✨ 계획
lottos에 있는 숫자랑 win_nums에서 일치하는 숫자의 개수 => 최저순위
최저 순위 + lottos의 0의 개수 => 최고순위
+ 원래 처음에 생각했던 계획,,
// const num = lottos에서 0이 아닌 수를 골라냄 filter() oo
// num에서 win_nums에 해당하는 숫자가 있는지 찾음 includes() oo
// => 몇개가 일치하는지 찾음 oo
// lottos에서 0이 몇개 있는지 찾아 oo
// 위에서 num이랑 win_nums랑 일치했던 수를 제외하고 win_nums에 있는 숫자 전부 일치 => 최고 순위
// 위에서 num이랑 win_nums랑 일치했던 수를 제외하고 win_nums에 있는 숫자 전부 일치 => 최저 순위
function solution(lottos, win_nums) {
const num = lottos.filter(n => n !== 0);
const intersection = win_nums.filter(n => num.includes(n));
const zero = lottos.filter(n => n == 0);
const first = intersection.length;
const second = intersection.length + zero.length;
let result = [];
if(second == 6) {
result += 1
} else if(second == 5) {
result += 2
} else if(second == 4) {
result += 3
} else if(second == 3) {
result += 4
} else if(second == 2) {
result += 5
} else if(second == 1) {
result += 6
}
if(first == 6) {
result += 1
} else if(first == 5) {
result += 2
} else if(first == 4) {
result += 3
} else if(first == 3) {
result += 4
} else if(first == 2) {
result += 5
} else if(first == 1) {
result += 6
}
if(first == 0 && second == 0) {
return [6, 6];
} else if (first == 0 && second == 6) {
return [1, 6];
} else if (first == 6 && second == 6) {
return [1, 1];
} else {
return result.split('').map(Number);
}
}
if문을 사용했던,, 그런,, ㅋ코드,,
여기서 예외처리를 해주는게 중요했던것같다.
- lottos랑 win_nums의 숫자가 전부 다 일치하는 경우
- lottos랑 win_nums의 숫자가 전부 다 불일치하는 경우
- lottos의 번호가 전부 다 0인 경우
그리고 여기서 교집합 구하는 코드도 알게됐다.
const intersection = win_nums.filter(n => num.includes(n));
이게 교집합 구하는 코드였는데 includes()는 처음 써봐서 신기했다.
또 마지막에 배열 내 문자열을 숫자로 바꾸는거
result.split('').map(Number);
이렇게 처리해준다는걸 알게됐다.~
'코테연습' 카테고리의 다른 글
43. 크레인 인형 뽑기 게임 (0) | 2022.05.13 |
---|---|
42. 숫자 문자열과 영단어 (0) | 2022.05.12 |
40. 신규 아이디 추천 (0) | 2022.05.05 |
39.Valid Parentheses (0) | 2022.04.28 |
38.Moving Zeros To The End (0) | 2022.04.14 |
댓글