🙌 출처 - 프로그래머스 🙌
다음 문제는, 알아볼 수 없는 로또번호가 존재할 때, 당첨 가능한 최고 순위와 최저 순위를 구하는 문제입니다.
- 당첨 로또 번호가 입력받은 배열내에 값이 있는지 체킹하기
- 있다면 max, min값 증가
- 만약 있는 숫자가 0이라면 max값만 증가
- max, min값에 대응하는 순위 반환해주기
def count(num):
if num == 6:
return 1
elif num == 5:
return 2
elif num == 4:
return 3
elif num == 3:
return 4
elif num == 2:
return 5
else:
return 6
def solution(lottos, win_nums):
answer = []
count_min = 0
count_max = 0
for i, v in enumerate(lottos):
if v in win_nums:
count_min += 1
count_max += 1
elif v == 0:
count_max += 1
answer.append(count(count_max))
answer.append(count(count_min))
return answer
def solution(lottos, win_nums):
rank = [6, 6, 5, 4, 3, 2, 1]
answer = []
min_count = 0
for nums in win_nums :
if nums in lottos :
min_count += 1
zero_count = lottos.count(0)
max_count = zero_count + min_count
answer.append(rank[max_count])
answer.append(rank[min_count])
return answer
내 로직과 이 분의 로직이 비슷한데, 여기서 배울점은 파이썬의 리스트의 장점을 이용해 코드를 줄였다는 점과, 0이 있을때는 max값만 증가되는 점을 이용해 처음에 0의 갯수를 센 뒤 min값에 0의 갯수를 더해 max값을 구한 부분이 인상깊었다.
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]
이 문제는 크게 어렵지 않아 파이썬에만 더 익숙해지면 될 것 같다.