[프로그래머스 / Level 1] 로또의 최고 순위와 최저 순위 (파이썬)

2022. 3. 29. 20:48·🎲 알고리즘 공부/프로그래머스

📝 문제

>  로또가 훼손되어 일부 번호를 알아볼 수 없게 되었다. 남아있는 번호를 이용하여 해당 로또의 최고 순위와 최저 순위를 구하라.

동생의 낙서 때문에 훼손된 로또

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

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

🎨 풀이

💡 첫번째 시도 = 성공 

- 이 문제는 로또의 남아있는 번호로 최고 순위와 최저 순위를 유추하는 문제다.

최고 순위는 [맞은 개수 + 훼손된 개수] 이고, 최저 순위는 [맞은 개수]다.

훼손된걸 다 맞았다고 치면 최고 순위가 될 것이고 다 틀렸다고 치면 최저 순위가 될 것이기 때문이다.  

위의 사진을 예로 들면, 21 3 4 는 남아있는 번호인데, 그 중에서 2개가 맞았다고 치면 다른 3개가 다 맞았을 때 5개를 맞춰 2위가 되고, 2개만 맞고 나머지는 다 틀렸을 때는 그대로 5위가 되는 것이다. 그래서 2위가 최고 순위, 5위가 최저 순위다. 

 

def solution(lottos, win_nums):
    answer = []
    count = 0;
    zero_count = lottos.count(0)
    
    for i in lottos:
        if i in win_nums:
            count += 1;
    
    if count == 0 :
        answer.append(6)
        if zero_count == 0:
            answer.insert(0,answer[0]-zero_count) 
        else : answer.insert(0,answer[0]-zero_count+1) 
    elif count == 1 :
        answer.append(6)
        answer.insert(0,answer[0]-zero_count) 
    elif count == 2 :
        answer.append(5)
        answer.insert(0,answer[0]-zero_count) 
    elif count == 3 :
        answer.append(4)
        answer.insert(0,answer[0]-zero_count) 
    elif count == 4 :
        answer.append(3)
        answer.insert(0,answer[0]-zero_count) 
    elif count == 5 :
        answer.append(2)
        answer.insert(0,answer[0]-zero_count) 
    elif count == 6 :
        answer.append(1)
        answer.insert(0,1) 
        

    
    return answer

 

> lottos가 민우가 들고있는 로또 번호이고, win_nums가 당첨번호다.

맨 처음 for문에서 민우 로또에 당첨 숫자가 얼마나 있는지 센 후 count에 저장한다.

그리고, 맞은 개수에 따라서 if문을 돌려 수행한다. if문이 각각 있는 이유는 append 해야할 숫자가 다 달라서 그렇다. count를 이용해서 최저 순위를 answer에 추가한 후, 최저순위 - 0의 개수(zero_count = 훼손된 로또 번호 개수)를 answer의 0번째 자리에 추가해준다. 그러면 끝난다!

 

 

💡 두번째 시도 = 성공 = 간결한 버전

def solution(lottos, win_nums):
    answer = []
    count = 0;
    zero_count = lottos.count(0)
    
    for i in lottos:
        if i in win_nums:
            count += 1;
    
    if count == 0 :
        answer.append(6)
        if zero_count == 0:
            answer.insert(0,answer[0]-zero_count) 
        else : answer.insert(0,answer[0]-zero_count+1) 
    else : 
        answer.append(7-count)
        answer.insert(0,answer[0]-zero_count)     

    return answer

 

> 위 코드가 좀 조잡해보인다는 생각이 들었다. 그리고, 글을 적다보니 if문이 이렇게 많지 않아도 될 것 같은데? 라는 생각이 들어 해봤는데 성공이 떴다. 위 코드는 최저순위를 추가해주는 과정에서 각각 숫자가 다르다보니 다 따로 elif를 써서 코드가 괜시리 읽기 싫어 보이고 그랬는데, 7-count를 추가해주니까 문제가 잘 해결되었다. 

 

 

⭐ 느낀점

 

> 예전에도 풀면서 이 코드는 좀 별로다, 교수님이 보시면 정말 안좋아할 것 같은 그런 코드다 라고 생각했었는데 그래도 확 줄어들어서 기분이 좋다. 이게 아마 2달 전에 풀었던 코드인 것 같은데 그래도 내가 그동안 좀 발전했구나라는 생각도 들고 그렇다. 이 문제가 막 어려운 문제는 아니지만 그래도 나는 조그마한 성장이 느껴져서 좋다. 발전이 없이 그냥 머물고있나 싶었는데 발전을 조금씩 하고있었나보다. 

 

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / Level 1] 숫자 문자열과 영단어 (파이썬)  (0) 2022.03.31
[프로그래머스 / Level 1] 신규 아이디 추천 (파이썬)  (0) 2022.03.30
[프로그래머스 / Level 1] 직사각형 별찍기 (파이썬)  (0) 2022.03.28
[프로그래머스 / Level 1] x만큼 간격이 있는 n개의 숫자 (파이썬)  (0) 2022.03.27
[프로그래머스 / Level 1] 행렬의 덧셈 (파이썬)  (0) 2022.03.26
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / Level 1] 숫자 문자열과 영단어 (파이썬)
  • [프로그래머스 / Level 1] 신규 아이디 추천 (파이썬)
  • [프로그래머스 / Level 1] 직사각형 별찍기 (파이썬)
  • [프로그래머스 / Level 1] x만큼 간격이 있는 n개의 숫자 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    nodejs
    스프링 부트
    코민이
    피보나치수
    프로그래머스
    카카오
    codeup
    파이썬
    백준
    신입일기
    코린이
    오블완
    코테
    코드업
    컨텐더스
    til
    연습문제
    폰켓몬
    6월 목표
    일기
    스프링부트
    오버워치
    티스토리챌린지
    BOJ
    행렬덧셈
    충무로
    정보처리기사
    정처기
    찬양추천
    50문답
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 1] 로또의 최고 순위와 최저 순위 (파이썬)
상단으로

티스토리툴바