문제
내 로또 번호 6자리와 당첨 번호 6자리의 두 배열이 주어진다.
내 로또 번호엔 0이 있을 수도 있으며 이는 최고 순위, 최저 순위에 따라 당첨 번호로
변경될 수도 있다.
ex) [0,0,0,0,0,0] [1,2,3,4,5,6]이 주어지면 최고 순위는 1등, 최저 순위는 6등
내 코드
def solution(lottos, win_nums):
same=set(win_nums)-set(lottos)
min = len(lottos)-len(same) #원래 맞은 숫자
if min == 6: #애초에 1등
return [1,1]
max = min
for i in range(len(lottos)):
if min == 6:
return [1,1]
if lottos[i] == 0:
max += 1
if min == 0 and max == 0: #애초에 6등
return [6,6]
if min == 0 or min == 1:
return [7-max, 6]
return [7-max, 7-min]
for문 없이 다시 풀어보기
def solution(lottos, win_nums):
rank = [6, 6, 5, 4, 3, 2, 1]
same = set(win_nums) - set(lottos)
min = len(lottos) - len(same)
max = min
cnt_0 = lottos.count(0)
max = min + cnt_0
return [rank[max], rank[min]]
문제 풀이
min은 당첨번호에서 내 원래 로또번호를 뺀 값 → 최소 당첨 개수
max는 min + 0의 개수
고수 풀이
- 최고 순위는 당첨 번호와 내 번호가 일치하는 숫자 + 0의 개수
- 최저 순위는 일치하는 숫자만
✅핵심은 rank를 배열로 둔 것
def solution(lottos, win_nums):
rank=[6,6,5,4,3,2,1]
cnt_0 = lottos.count(0)
ans = 0
for x in win_nums:
if x in lottos:
ans += 1
return rank[cnt_0 + ans],rank[ans]
'Python > Programmers' 카테고리의 다른 글
Lv.1-모의고사 (0) | 2021.07.07 |
---|---|
Lv.1-체육복 (0) | 2021.07.07 |
Lv.1-음양 더하기 (0) | 2021.07.07 |
Lv.1-소수 찾기 (0) | 2021.07.07 |
Lv.1-K번째 숫자 꺼내기 (0) | 2021.07.07 |