https://school.programmers.co.kr/learn/courses/30/lessons/77484
로또 번호 6자리 중, 낙서로 인해 지워진 번호는 0으로 표기된다.
알고자 하는 것은 해당 로또 번호의 최고와 최저 순위이다.
즉, 0으로 표시된 번호가 다 당첨이었을 경우와 0으로 표시된 번호가 모두 당첨이 아닐 경우의 순위를 각각 구하는 문제이다.
구현이 어렵지 않았고, 실제로 어렵지 않게 풀었다.
다만, 더 좋은 소스코드를 2개 발견해서 첨부하고자 한다.
우선 내가 작성한 코드
def solution(lottos, win_nums):
answer = []
# 당첨된 번호 개수
count = 0
# 0으로 표시된 번호 개수
zero = 0
for lotto in lottos:
if lotto == 0:
zero += 1
if lotto in win_nums:
count += 1
print(count, count+zero)
# 0으로 적힌 번호가 당첨이라고 가정한 경우의 순위
answer.append(7-(count+zero))
# 0으로 적힌 번호가 당첨이 아니라고 가정한 경우의 순위
answer.append(7-count)
# 그 외 처리 (0개 맞았을 때)
if answer[0] >= 7:
answer[0] = 6
if answer[1] >= 7:
answer[1] = 6
# answer.sort()
return answer
어렵지 않은 문제였기 때문에 그냥 닥치는 대로, 생각나는 대로 작성한 소스 코드이며 가독성이 그리 좋다거나 하지는 않다.
def solution(lottos, win_nums):
rank = {
0: 6,
1: 6,
2: 5,
3: 4,
4: 3,
5: 2,
6: 1
}
return [rank[len(set(lottos) & set(win_nums)) + lottos.count(0)], rank[len(set(lottos) & set(win_nums))]]
개인적으로 가장 마음에 들었던 코드로, set 자료형을 이용했다.
굉장히 가독성이 좋다고 생각이 든다.
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]
굉장히 간결하면서 직관적인 코드이다.
세상엔 참... 좋은 개발자들이 많은 것 같다.