본문 바로가기
코테연습

41. 로또의 최고순위와 최저순위

by hxunz 2022. 5. 11.

https://programmers.co.kr/learn/courses/30/lessons/77484

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

훔,,, 효율성은 떨어지는 코드지만,, 그래도 풀었다..! 

 

✨ 이해

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문을 사용했던,, 그런,, ㅋ코드,, 

여기서 예외처리를 해주는게 중요했던것같다.

  1. lottos랑 win_nums의 숫자가 전부 다 일치하는 경우
  2. lottos랑 win_nums의 숫자가 전부 다 불일치하는 경우
  3. 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

댓글