[Python] 프로그래머스 lv1 - 로또 최고 순위와 최저 순위
2023. 12. 26. 17:07ㆍ알고리즘/문제풀이
[Python] 프로그래머스 lv1 - 로또 최고 순위와 최저 순위
https://school.programmers.co.kr/learn/courses/30/lessons/77484
문제 설명
- lottos와 win_nums의 경우 6개의 숫자 배열
- 등수 확인을 위해 dictionary를 사용하여 등수를 기입
- 알아볼 수 없는 숫자는 0으로 표기
- 즉 알아볼 수 없는 숫자를 맞게 할 수도 틀리게 할 수도 있음
- 최고 순위의 경우 기존의 숫자에서 맞는 경우 + 0으로 표기가 된 숫자의 경우를 더해서 등수를 출력
- 최저 순위의 경우 기존 숫자에서 맞는 경우만 dictionary로 조회하여 출력
풀이 코드
- dictionary 선언
- 맞는 수와 등수를 가지고 있는 dictionary 선언
- 해당 dic에서 맞는 번호의 결괏값을 key로 넣어 등수를 가져올 예정
- lottos를 for 구문으로 순회
- 순회 시 win_nums와 맞는 숫자가 있다면 cnt(맞는 숫자)를 +1
- 0이 lottos에 존재하면 해당 경우는 등수에 영향을 미치므로 0의 개수 체크
- 0으로 적힌 숫자와 맞는 숫자의 합은 최대 당첨순위의 경우, 맞는 숫자의 합으로는 최저 당첨순위의 합
예상 시간 복잡도 - O(n)
- dictionary에서 조회 - O(1)
- for loop - O(n)
def solution(lottos, win_nums):
answer = []
dic = {6:1,5:2,4:3,3:4,2:5,1:6,0:6} # 맞은 숫자의 갯수 : 등수
cnt = 0
cnt0= 0
# 맞는 숫자의 갯수를 파악, 0으로 적힌 숫자도 파악
for i in lottos:
if i in win_nums:
cnt+=1
if i == 0:
cnt0 +=1
# 0으로 적힌 숫자와 맞는 숫자의 합은 최대 당첨순위의 경우, 맞는 숫자의 합으로는 최저 당첨순위의 합
hope = cnt + cnt0
return dic[hope], dic[cnt]
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스 lv1 - 가장 가까운 같은 글자 (0) | 2023.12.28 |
---|---|
[Python] 프로그래머스 lv2 - 연속된 부분 수열의 합 (0) | 2023.12.27 |
[Python] 프로그래머스 lv1 - 달리기 경주 (0) | 2023.12.26 |
[Python] 프로그래머스 lv1 - 모의고사 (0) | 2023.05.20 |
[Python] 프로그래머스 lv1 - 콜라 문제 (1) | 2023.05.19 |