본문 바로가기
알고리즘/코딩테스트 문제풀이

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

by 바른 호랑이 2022. 6. 22.
728x90
반응형

※ 문제링크 

 

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

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

programmers.co.kr

이번 문제는 정렬과 조건문, 반복문을 활용하면 풀 수 있는 문제였다. 주어지는 입력값 자체가 많지도 않고, 예외적인 조건도 거의 없어서 문제의 조건대로만 작성하면 답을 구할 수 있었다. 고려해야할 조건은 일치 숫자가 2개 이상일때부터 등수가 일치 숫자마다 하나씩 올라간다는 것이었고, 나머지는 0의 개수를 확인하여 계산식에 반영해주었다. 자세한 풀이방법과 코드는 아래와 같다.
1. 입력받은 값들을 sort함수를 사용하여 오름차순으로 정렬해준다.(default값임)
2. 0의 개수를 셀 cnt1 변수와 일치하는 숫자의 개수를 셀 cnt2 변수를 선언해준다.
3. 반복문을 통해 cnt1 변수와 cnt2 변수의 값을 갱신해주고, 조건문을 통해 최고 순위와 최저순위를 작성하여 출력한다.

 

def solution(lottos, win_nums):
    lottos.sort()
    win_nums.sort()
    cnt1, cnt2 = 0, 0
    # cnt1 : 0의 개수 / cnt2 : 일치하는 로또번호의 수
    for number in lottos:
        if number == 0:
            cnt1 += 1
        else:
            break
    for win_number in win_nums:
         for lotto_number in lottos[cnt1:]:
                if win_number == lotto_number:
                    cnt2 += 1
    # 최고 순위 산출
    if cnt1 + cnt2 >= 2:
        max_rank = 6 - (cnt1 + cnt2 - 1)
    else: 
        max_rank = 6
    # 최저 순위 산출
    if cnt2 >= 2:
        min_rank = 6 - (cnt2 - 1)
    else:
        min_rank = 6
    answer = [max_rank, min_rank]
    return answer

lottos = [45, 4, 35, 20, 3, 9]
win_nums = [20, 9, 3, 45, 4, 35]
solution(lottos, win_nums)

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글