관리 메뉴

솜씨좋은장씨

[Programmes] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) - 로또의 최고 순위와 최저 순위 (Python) 본문

Programming/코딩 1일 1문제

[Programmes] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) - 로또의 최고 순위와 최저 순위 (Python)

솜씨좋은장씨 2021. 8. 12. 11:52
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스 2021년 웹 백엔드 개발자 상반기 Dev-Matching 문제 였던

로또의 최고 순위와 최저 순위 입니다.

이번주 로또 당첨을 기원하며!

 

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

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

programmers.co.kr

Solution

def get_lotto_rank(match_num):
    rank_dict = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6, 0: 6}
    
    return rank_dict[match_num]
    

def solution(lottos, win_nums):
    answer = []
    
    certain_numbers = [number for number in lottos if number != 0]
    
    uncertain_nums = len(lottos) - len(certain_numbers)
    
    min_match = len(set(win_nums) & set(certain_numbers))
    
    max_match = min_match + uncertain_nums
    
    
    return [get_lotto_rank(max_match), get_lotto_rank(min_match)]

Solution 풀이

lottos 에 들어있는 숫자들이 현재 내가 가지고 있는 로또의 번호이고,

숫자 중 0으로 표시되어있는 숫자들은 어떤 숫자인지 잘 모르겠는 번호입니다.

win_nums는 당첨 번호 입니다.

먼저 lottos에서 0이 아닌 숫자, 즉 확실하게 알고있는 번호만을 certain_numbers에 저장합니다.

불확실한 숫자는 몇개인지 lottos의 개수에서 확실하게 아는 번호의 개수를 빼어 계산해 둡니다.

그 다음 당첨 번호와 확실하게 아는 번호를 set의 &을 활용하여 내 확실한 번호중에 당첨 된 번호를 구해주고

이 번호의 갯수를 구합니다.

그럼 이게 바로 최소 당첨 개수이고

여기서 내가 잘 모르고있던 번호의 개수만큼이 사실은 다 당첨 번호였다 라는 가정하에 

최소 당첨 갯수에 잘 모르고 있던 번호의 개수만큼 더한 개수가 최대 당첨 개수 입니다.

이를 등수로 변환하여 출력하면 끝!

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments