[프로그래머스] 로또의 최고 순위와 최저 순위
https://programmers.co.kr/learn/courses/30/lessons/77484
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
<문제 설명>
로또 번호 6개를 이용하여 로또의 순위를 정하는 문제이다.
하지만 6개 중 일부는 알아볼 수 없어 0으로 표기되어있으며, 이 로또의 최고 순위와 최저 순위를 출력하면 된다.
<문제풀이>
로또 번호가 가장 많이 일치하는 경우 : 맞힌 숫자의 개수 + 0의 개수
로또 번호를 가장 적게 일치하는 경우 : 맞힌 숫자의 개수
따라서 일치하는 숫자의 개수를 세고, 0의 개수를 세면된다고 생각했다.
<나의 풀이>
def solution(lottos, win_nums):
zero_count = 0
ans_count = 0
for num in lottos: # lottos에서 하나씩 꺼낸다
if num != 0 : # 그 숫자가 0이 아니고
if num in win_nums: # win_num에 있으면
ans_count += 1
else: # 그 숫자가 0이면
zero_count += 1
max_rank = 7 - (zero_count + ans_count) # 최대 순위
min_rank = 7 - ans_count # 최저 순위
if max_rank > 6 : max_rank = 6 # 순위가 6보다 커지는 것을 방지
if min_rank > 6 : min_rank = 6
return [max_rank, min_rank]
for문을 이용하여 0의 개수와 일치하는 숫자의 개수를 구했다.
그 값을 이용하여 최대 순위와 최저 순위를 구했으며,
순위가 6보다 커지는 것을 방지하기 위해 if문을 추가했다.
<풀이 개선>
0을 세는 방법을 for문이 아닌 lottos.count(0)을 사용한다.
또한 여러부분에서 굳이 코드를 따로 쓰지 않고 합쳐서 쓰는 방식을 이용하여 코드의 길이를 줄일 수 있다.
def solution(lottos, win_nums):
zero_count = lottos.count(0)
ansList = [x for x in lottos if x in win_nums]
max_rank = 7 - (zero_count + len(ansList))
min_rank = 7 - len(ansList)
if max_rank > 6 : max_rank = 6
if min_rank > 6 : min_rank = 6
return [max_rank, min_rank]
오잉 시간이 더 걸리네,,,, 아주 아주 조금이지만,,,
for문을 두번 돌린것과 다름없어서 그런가 하는 나의 개인적인 생각,,,
그래도 이런 방법도 있다는 걸 알아두자~
<얻은 지식>
a = 3
b = 5 + a if a > 2 else 5
b
8
a = 7
b = 5 + a if a > 2 else 5
b
12
a = 7
c = 6
b = 5 + c if a >2 else 5
b
11