Programmers Coding-Test

[Python] 2021 Dev-Matching : 로또의 최고 순위와 최저 순위

으녜 2021. 4. 29. 16:25
728x90

 

 

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

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

programmers.co.kr

 

💡문제💡

민우가 구매한 1~45 숫자 6개로 이루어진 로또가 있습니다. 로또에 알 수 없는 번호를 0으로 표기할 때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아 return 하시오.

 

로또의 순위

1등 : 6개 번호 모두 일치

2등 : 5개 번호 일치

3등 : 4개 번호 일치

4등 : 3개 번호 일치

5등 : 2개 번호 일치

낙첨 : 그 외

 

 

[제한사항]

  • lottos는 길이 6인 정수 배열입니다.
  • lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    • 0은 알아볼 수 없는 숫자를 의미합니다.
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    • lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
  • win_nums은 길이 6인 정수 배열입니다.
  • win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
    • win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

 

코드 및 풀이👩🏻‍💻

첫 번째 풀이
1. 당첨번호와 비교해 맞은 번호의 개수와 0(알지 못하는 번호의 개수)의 개수를 센다.
2. 최고 순위는 맞은 번호의 개수 + 0의 개수(알지 못하는 번호가 다 맞았을 경우)
3. 최저 순위는 맞은 번호의 개수(알지 못하는 번호가 다 틀렸을 경우)

'''

def solution(lottos,win_nums):
    win_nums = sorted(win_nums)
    lottos = sorted(lottos)
    count1 = 0
    count2 = 0
    answer = []

    for i in range(len(lottos)):
        if(lottos[i]==0): #알지 못하는 번호일 때
            count1 += 1
        for j in range(len(win_nums)):
            if(lottos[i]==win_nums[j]): #맞는 번호 count
                count2 += 1

    if(count1 ==6):
        answer.extend([1,6]) #lottos안의 모든 번호를 알지 못할 때
    else:
        answer.extend([7-(count2+count1),7-count2]) #최고 순위와 최저 순위


    return answer

'''

=> 테스트 케이스 1개가 실패했다. 다시 생각해보니 다 맞지 못했을 때도 낙첨, 1개를 맞췄을 때도 낙첨이었는데, 다 맞지 못했을 때만 고려했다.

 

두 번째 풀이
1. 방법은 기존과 동일
2. lotto 딕셔너리를 만들어 맞춘 개수에 따라 등수 달라짐(1개 맞췄을 때도 6등으로 계산)

'''

def solution(lottos,win_nums):
    lotto = {6:1,5:2,4:3,3:4,2:5,1:6,0:6}
    count1, count2 = 0,0

    for i in range(len(lottos)):
        if(lottos[i]==0):
            count1 +=1
        for j in range(len(win_nums)):
            if(lottos[i]==win_nums[j]):
                count2 +=1

     return lotto[count2+count1],lotto[count2]

'''

728x90