영호
[프로그래머스] 로또의 최고 순위와 최저 순위 - Python 본문
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77484
접근 방법
- rank배열을 만들어 [6, 6, 5, 4, 3, 2, 1]로 순위를 정해놓는다.
- 주어진 lottos에서 0을 count 한다.
- 0이 6개인 경우
- lottos의 모든 번호를 모르기 때문에 1 ~ 6등 모두 가능하다 -> 최고 순위 : 1등, 최저 순위 : 6등
- 0이 한 개도 없는 경우
- lottos와 win_nums를 정렬한다.
- lottos와 win_nums를 순회하며 동일한 번호가 경우를 카운트한다.
- 내가 고른 모든 lottos번호를 알기 때문에 일치하는 개수만큼 최고 순위와 최저 순위를 return 한다.
- 모르는 0이 1 ~ 5개인 경우
- lottos를 내림차순으로 정렬한다.
- 6 - (lottos에 있는 0의 개수)만큼 for문을 돌린다.
- lottos는 내림차순으로 정렬되어 있고, 0의 개수만큼 6에서 빼고 돌리기 때문에 내가 고른 lottos의 번호들만 win_nums에 있는지 검사할 수 있다.
- 만약 lottos에 있는 0의 개수와 3번 과정에서 체크된 번호 수를 더해 6 이상이면 최고 순위는 1위이다.
- 6 미만이면 두 개를 더한 수가 맞춘 개수이기 때문에 rank [더한 수]를 하면 최고 순위가 된다.
- 최저 순위는 0들은 다 안 맞고 내가 알고 있는 번호들만 맞은 경우이기 때문에, rank [3번 과정에서 체크된 수]가 최저 순위가 된다.
Code
# https://programmers.co.kr/learn/courses/30/lessons/77484
def solution(lottos, win_nums):
rank = [6, 6, 5, 4, 3, 2, 1]
zeros = lottos.count(0)
# 내가 고른 번호를 전부 모르는 경우
if zeros == 6:
return [1, 6]
# 내가 고른 번호를 전부 알 경우
if zeros == 0:
lottos.sort()
win_nums.sort()
count = 0
for i in range(6):
if lottos[i] == win_nums[i]:
count += 1
return [rank[count], rank[count]]
# 위 두 가지 경우를 제외한 경우
lottos.sort(reverse=True)
count = 0
for i in range(6 - zeros):
if lottos[i] in win_nums:
count += 1
best = 6 if count + zeros > 6 else count + zeros
answer = [rank[best], rank[count]]
return answer
좋아요가 가장 많은 코드
def solution(lottos, win_nums):
rank=[6,6,5,4,3,2,1]
cnt_0 = lottos.count(0) # lottos 안의 0의 개수를 반환
ans = 0
for x in win_nums:
if x in lottos:
ans += 1
return rank[cnt_0 + ans],rank[ans]
Git
'Algorithm > 구현' 카테고리의 다른 글
[알고리즘] 대표값 (Python) (0) | 2022.06.07 |
---|---|
[알고리즘] k번째 큰 수 (Python) (0) | 2022.06.05 |
Comments