본문 바로가기
Algorithm/구현

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

by HANNI하니 2023. 5. 19.

사용 언어 - Python3

문제 - 로또의 최고 순위와 최저 순위

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

정답

단순 구현 (정답 맞춘 여부 O)

내 첫번째 정답에서 보완할 점

1. 굳이 win_nums에서 당첨된 애들을 삭제하고 개수를 세지 않아도 된다.

0이 3개인데, 당첨번호가 2개일까봐 if문을 넣었지만,

생각해보니 lottos와 win_nums의 리스트 길이는 항상 같기 때문에 고려하지 않아도 되었다. ㅎㅎ

2. if 문 대신 딕셔너리나 리스트 사용

def solution(lottos, win_nums):
    answer = []
    cnt = 0 # 당첨 개수
    zero = lottos.count(0) # 0 개수
    
    for l in lottos:
        if l in win_nums: # 당첨
            cnt += 1
            win_nums.remove(l)

    if len(win_nums) >= zero: # 미당첨
        n_max = cnt+zero # zero를 모두 당첨
        n_min = cnt # zero가 모두 미당첨

    else:
        n_max = cnt+len(win_nums)
        
    if n_max == 6:
        answer.append(1)
    elif n_max == 5:
        answer.append(2)
    elif n_max == 4:
        answer.append(3)
    elif n_max == 3:
        answer.append(4)
    elif n_max == 2:
        answer.append(5)
    else:
        answer.append(6)
            
    if n_min == 6:
        answer.append(1)
    elif n_min == 5:
        answer.append(2)
    elif n_min == 4:
        answer.append(3)
    elif n_min == 3:
        answer.append(4)
    elif n_min == 2:
           answer.append(5)
    else:
        answer.append(6)

 

위와 아이디어는 똑같고, 최소화했다.

rank라는 딕셔너리를 사용했다. 1과 0인 경우는 순위를 6으로 지정해준다.

+ 리스트 인덱싱을 활용 방법

    rank = [6,6,5,4,3,2,1]
    return rank[n_max],rank[n_min]

def solution(lottos, win_nums):
    cnt = 0 # 당첨 개수
    zero = lottos.count(0) # 0 개수
    
    for l in lottos:
        if l in win_nums: # 당첨
            cnt += 1
    n_max = cnt+zero # zero를 모두 당첨
    n_min = cnt # zero가 모두 미당첨

    rank = {6:1,5:2,4:3,3:4,2:5,1:6,0:6}
    answer = [rank[n_max],rank[n_min]]
    
    return answer

 

 

레퍼런스

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글