Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Día de Ruru

20230218 TIL 본문

항해99/TIL

20230218 TIL

공대루루 2023. 2. 18. 23:32

코딩 테스트 풀이 (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