로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
순위 | 당첨 내용 |
---|---|
1 | 6개 번호가 모두 일치 |
2 | 5개 번호가 일치 |
3 | 4개 번호가 일치 |
4 | 3개 번호가 일치 |
5 | 2개 번호가 일치 |
6(낙첨) | 그 외 |
function solution(lottos, win_nums) {
// 일치하는 것의 갯수 비교 -> 일치하는 요소 갯수 + 0의 갯수
// 일단 lottos와 win_nums sort하고
// lottos에서 0인것 다 제함+ 갯수 카운트?
// 두 배열 비교
lottos.sort((a,b)=>a-b)
win_nums.sort((a,b)=>a-b)
let count= 0
let cnt = 0
let len=lottos.length
for(let i=0; i<len; i++){
if(lottos[i] === 0){
lottos.shift()
count++
i--
}
}
if (count === 6){ //0이 6개인경우 제외 완료
return [1,6]
}
for(let i=0; i<lottos.length; i++){ // 일치하는 요소 갯수 카운트
if(win_nums.includes(lottos[i])){
cnt++
}
}
let score = 7
if(cnt <2){ // 일치하는 요소가 0-1개 이면 cnt에 1할당
cnt = 1
}
//score - (0의 갯수+일치하는 요소 갯수)이 최고순위/ score - 일치하는 요소 갯수가 최저순위
return [ score-(count+cnt), score-cnt]
}
//############################ solution 2 ################################
function solution(lottos, win_nums) {
// 배열 index를 이용할 수 있다 ->순위를 보면 1개-0개 번호는 둘다 6등
// filter로 0인 것만 거른것의 length 또한 0의 갯수이다.
const grade = [6,6,5,4,3,2,1] // 0~1개 번호 일치하면 6등---index이용
let zeroCnt = lottos.filter(lotto => lotto === 0).length;
let minCnt =lottos.filter(lotto => win_nums.includes(lotto)).length
let maxCnt = minCnt + zeroCnt
return [grade[maxCnt], grade[minCnt]]
}
로또의 순위를 정하는 방식을 보고 배열을 떠올렸어야 한다!
번호가 일치하는 갯수에 따라 배열의 index에 맞게 순위를 구성하는 것!
(0개면 6등,1개면 6등,2개면 5등..-> 배열[0],배열[1]...)
filter로 원하는 것을 거른 배열의 length 또한 원하는 요소의 갯수(잊지말자)
문제풀이, 알고리즘이 부족해서 프로그래머스 1단계부터 시작했다
내가 쓴 코드들은 군더더기가 많고 정리가 덜 되보이지만, 앞으로 차근차근 고쳐나가면 된다. 화이팅!