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