사용 언어 - Python3
문제 - 로또의 최고 순위와 최저 순위
정답
단순 구현 (정답 맞춘 여부 O)
내 첫번째 정답에서 보완할 점
1. 굳이 win_nums에서 당첨된 애들을 삭제하고 개수를 세지 않아도 된다.
0이 3개인데, 당첨번호가 2개일까봐 if문을 넣었지만,
생각해보니 lottos와 win_nums의 리스트 길이는 항상 같기 때문에 고려하지 않아도 되었다. ㅎㅎ
2. if 문 대신 딕셔너리나 리스트 사용
def solution(lottos, win_nums):
answer = []
cnt = 0 # 당첨 개수
zero = lottos.count(0) # 0 개수
for l in lottos:
if l in win_nums: # 당첨
cnt += 1
win_nums.remove(l)
if len(win_nums) >= zero: # 미당첨
n_max = cnt+zero # zero를 모두 당첨
n_min = cnt # zero가 모두 미당첨
else:
n_max = cnt+len(win_nums)
if n_max == 6:
answer.append(1)
elif n_max == 5:
answer.append(2)
elif n_max == 4:
answer.append(3)
elif n_max == 3:
answer.append(4)
elif n_max == 2:
answer.append(5)
else:
answer.append(6)
if n_min == 6:
answer.append(1)
elif n_min == 5:
answer.append(2)
elif n_min == 4:
answer.append(3)
elif n_min == 3:
answer.append(4)
elif n_min == 2:
answer.append(5)
else:
answer.append(6)
위와 아이디어는 똑같고, 최소화했다.
rank라는 딕셔너리를 사용했다. 1과 0인 경우는 순위를 6으로 지정해준다.
+ 리스트 인덱싱을 활용 방법
rank = [6,6,5,4,3,2,1]
return rank[n_max],rank[n_min]
def solution(lottos, win_nums):
cnt = 0 # 당첨 개수
zero = lottos.count(0) # 0 개수
for l in lottos:
if l in win_nums: # 당첨
cnt += 1
n_max = cnt+zero # zero를 모두 당첨
n_min = cnt # zero가 모두 미당첨
rank = {6:1,5:2,4:3,3:4,2:5,1:6,0:6}
answer = [rank[n_max],rank[n_min]]
return answer
레퍼런스
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[프로그래머스 lv 1] 내적 (0) | 2023.05.21 |
---|---|
[프로그래머스 lv 1] 음양 더하기 (0) | 2023.05.19 |
[프로그래머스 lv 1] 약수의 개수와 덧셈 (0) | 2023.05.18 |
[프로그래머스 lv 1] 숫자 문자열과 영단어 (0) | 2023.05.18 |
[프로그래머스 lv 1] 부족한 금액 계산하기 (1) | 2023.05.17 |
댓글