영호

[프로그래머스] 로또의 최고 순위와 최저 순위 - Python 본문

Algorithm/구현

[프로그래머스] 로또의 최고 순위와 최저 순위 - Python

0h0 2022. 5. 11. 11:37

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/77484

접근 방법

  1. rank배열을 만들어 [6, 6, 5, 4, 3, 2, 1]로 순위를 정해놓는다.
  2. 주어진 lottos에서 0을 count 한다.
  3. 0이 6개인 경우
    1. lottos의 모든 번호를 모르기 때문에 1 ~ 6등 모두 가능하다 -> 최고 순위 : 1등, 최저 순위 : 6등
  4. 0이 한 개도 없는 경우
    1. lottos와 win_nums를 정렬한다.
    2. lottos와 win_nums를 순회하며 동일한 번호가 경우를 카운트한다.
    3. 내가 고른 모든 lottos번호를 알기 때문에 일치하는 개수만큼 최고 순위와 최저 순위를 return 한다.
  5. 모르는 0이 1 ~ 5개인 경우
    1. lottos를 내림차순으로 정렬한다.
    2. 6 - (lottos에 있는 0의 개수)만큼 for문을 돌린다.
    3. lottos는 내림차순으로 정렬되어 있고, 0의 개수만큼 6에서 빼고 돌리기 때문에 내가 고른 lottos의 번호들만 win_nums에 있는지 검사할 수 있다.
    4. 만약 lottos에 있는 0의 개수와 3번 과정에서 체크된 번호 수를 더해 6 이상이면 최고 순위는 1위이다.
    5. 6 미만이면 두 개를 더한 수가 맞춘 개수이기 때문에 rank [더한 수]를 하면 최고 순위가 된다.
    6. 최저 순위는 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