본문 바로가기

문제풀이

[프로그래머스] level1 로또의 최고 순위와 최저 순위(파이썬)

문제 설명

 

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 
아래는 로또의 순위를 정하는 방식입니다.

제한 사항

 

입출력 예

 


나의 풀이(전체 코드)

 

def solution(lottos, win_nums):
    answer = [6,6,5,4,3,2,1]
    count1 = count2 = 0
    for i in range(len(lottos)):
        if lottos[i] in win_nums:
            count1 += 1

    for i in range(len(lottos)):
        if (lottos[i] == 0) and (lottos[i] not in win_nums):
            lottos[i] = win_nums[i]
        if lottos[i] in win_nums:
            count2 += 1
    
    high_rank = answer[count2]
    low_rank = answer[count1]
    
    return [high_rank, low_rank]

 

해당 문제는 우리가 기존에 알고 있던 로또의 당첨 조건과는 다른 아래의 조건으로 해결해야 한다

순위 당첨 기준
1등 당첨번호 6개 숫자 일치
2등 당첨번호 5개 숫자 일치 
3등 당첨번호 4개 숫자 일치
4등 당첨번호 3개 숫자 일치
5등 당첨번호 2개 숫자 일치
낙첨 그 외

 

그래서 우리는 순위를 나타내는 리스트를 작성해준다. 이때, 낙첨은 당첨번호가 1개 일치 혹은 0개라는 사실을 알고 있기 때문에 아래와 같이 작성해준다.

또한, 최저 순위와 최고 순위를 카운트해주는 변수도 0으로 초기화해준다.

 

answer = [6,6,5,4,3,2,1]
count1 = count2 = 0

 

그 다음으로는 입력받은 로또 번호가 당첨 번호와 일치하는지, 일치한다면 최저 순위 변수인 count1 변수를 1 증가시켜준다.

 

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

 

다음 단계는 최고 순위를 계산하는 단계이다. 

 

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

 

만약 주어진 로또 번호가 0 '이고' 당첨 번호에 포함되어 있지 않다면, 해당 리스트의 변수는 당첨번호로 대체한다.

그다음 변경된 로또 번호가 당첨 번호에 포함되어 있다면 최고 순위 변수인 count2 변수를 1 증가시켜 준다.

 

마지막은 최고 순위와 최저 순위를 기존에 선언했던 answer 리스트를 사용하여 return 해주면 끝이 난다.

 

high_rank = answer[count2]
low_rank = answer[count1]
    
return [high_rank, low_rank]

 

 

해당 문제는 기존의 로또 순위 방식과 다르다는 것만 인지하면 크게 어려운 부분은 아니었다고 생각한다!