[Programmers] - 로또의 최고 순위와 최저 순위

오동훈·2021년 5월 2일
0

Programmers

목록 보기
32/64
post-thumbnail

1. Problem 📃

🙌 출처 - 프로그래머스 🙌

다음 문제는, 알아볼 수 없는 로또번호가 존재할 때, 당첨 가능한 최고 순위와 최저 순위를 구하는 문제입니다.

2. Logic 👨‍🏫

  1. 당첨 로또 번호가 입력받은 배열내에 값이 있는지 체킹하기
  2. 있다면 max, min값 증가
  3. 만약 있는 숫자가 0이라면 max값만 증가
  4. max, min값에 대응하는 순위 반환해주기

3. Code 💻

1. 내가 푼 코드

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

2. 다른 사람이 푼 코드

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값을 구한 부분이 인상깊었다.

3. 다른 사람이 푼 코드

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]

4. Feedback 📚

이 문제는 크게 어렵지 않아 파이썬에만 더 익숙해지면 될 것 같다.

profile
삽질의 기록들🐥

0개의 댓글