Día de Ruru
20230218 TIL 본문
코딩 테스트 풀이 (1)
알아볼 수 없는 번호를 0으로 표기하기로 하고,순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
입력 값 lottos = [44, 1, 0, 0, 31, 25] win_nums = [31, 10, 45, 1, 6, 19]
출력 값 [3, 5]
해결 방안
입력 값에 있는 0이 모두 당첨 번호인 경우 최고 순위가 되고 모두 당첨 번호가 아닌 경우 최저 순위가 되는 것을 생각해서 문제를 풀면 될 것 같다. 먼저 0이 없는 배열을 만들어서 당첨 번호와 비교하고 몇개가 일치하는지에 따라 다르게 값을 출력해줘야 할 것 같다고 생각했다!!
더보기
나의 풀이
function solution(lottos, winnums) {
var answer = [];
let correctNumber =[]
let list=[]
lottos.map(item => { //내 로또번호에서 0을 제외한 숫자들
if(item != 0) list.push(item)
})
let zero = (6-list.length)
list.map(elem => { //번호들 중에서 로또당첨된 번호들
if (winnums.includes(elem)) correctNumber.push(elem)
})
let minNum = correctNumber.length //맞은 숫자 최소값
let maxNum = correctNumber.length + zero //맞은 숫자 최대값
if (minNum == 6){
answer = [1,1]
}else if(maxNum == 6){
answer = [1,1+zero]
}else if(maxNum == 5){
answer = [2,2+zero]
}else if(maxNum == 4){
answer = [3,3+zero]
}else if(maxNum == 3){
answer = [4,4+zero]
}else if(maxNum == 2){
answer = [5,6]
}else if(maxNum == 1){
answer = [6,6]
}else{
answer = [6,6]
}
if (answer[1]>6){
answer[1] = 6
}
return answer;
}
근데 하다보니 너무 억지스러운 코드가 나와서 좀 아쉬웠다ㅠㅠㅠ 하지만 통과!! 통과만 하면 장땡일수도 있지만 뭔가 더 짧게 만든 사람이 있을 것 같아서 열심히 다른 사람들의 코드를 찾아봤다
알아야할 것
Array.prototype.includes() : 배열에 특정 요소를 포함하고 있는지 판별한다.
배열.includes(요소,검색을 시작할 위치)의 형태로 사용한다. 검색을 시작할 위치를 생략이 가능하며 기본 값은 0이다. includes는 대소문자를 구문하며 아래의 경우 둘다 true를 반환한다.
[1, 2, 3].includes(3);
[1, 2, 3].includes(3, -1);
♪ 또 다른 해결법
내 코드처럼 모든 경우의 수를 다 조건문으로 만드는 건 너무 비효율 적이기 때문에 각 경우의 수에 해당하는 랭크를 배열로 정리해서 사용할 수 있을 것 같다.
const rank = [6, 6, 5, 4, 3, 2, 1];
// 여기에서 maxNum 과 minNum을 구하는 코드를 짜준다
answer = [rank[maxNum],rank[minNum]]
이렇게 해주면 각 값을 인덱스로 써서 바로 순위를 출력할 수 있다!!!! 완전 간단!!
☆오늘 새로 알게 된 메소드★
new Date() : 년 월 일을 넣어서 현재 기준 날짜 값을 만들어 준다.
const today = new Date(); //현재 시간을 만들어준다.
new Date(year, monthIndex, day) //보통 이런 형태로 사용한다
Date.prototype.getDate() :주어진 날짜의 현지 시간 기준 일을 반환한다.
const birthday = new Date('August 19, 1975 23:15:30');
const date1 = birthday.getDate();
Date.prototype.getDay() : 주어진 날짜의 현지 시간 기준 요일을 반환하며 0은 일요일을 나타낸다.
const birthday = new Date('August 19, 1975 23:15:30');
const day1 = birthday.getDay();
Date.prototype.setDate() : 현재 설정된 월의 시작 부분을 기준으로 date 객체의 날짜를 설정한다,
var theBigDay = new Date(1962, 6, 7); // 1962-07-07
theBigDay.setDate(24); // 1962-07-24
'항해99 > TIL' 카테고리의 다른 글
20230224 TIL (Node.js 기초 공부 day1) (0) | 2023.02.25 |
---|---|
20230223 TIL (0) | 2023.02.24 |
20230217 TIL (0) | 2023.02.18 |
20230215 TIL (0) | 2023.02.16 |
20230214 TIL (0) | 2023.02.15 |
Comments