Problem Solving/Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ | Python] 둜또의 졜고 μˆœμœ„μ™€ μ΅œμ € μˆœμœ„

minzhen 2022. 6. 29. 13:07

πŸ“’  문제 정보

 

 

πŸ”’  문제 μ„€λͺ…

더보기

문제 μ„€λͺ…

둜또 6/45(μ΄ν•˜ '둜또'둜 ν‘œκΈ°)λŠ” 1λΆ€ν„° 45κΉŒμ§€μ˜ 숫자 쀑 6개λ₯Ό μ°μ–΄μ„œ λ§žνžˆλŠ” λŒ€ν‘œμ μΈ λ³΅κΆŒμž…λ‹ˆλ‹€. μ•„λž˜λŠ” 둜또의 μˆœμœ„λ₯Ό μ •ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.( *μ‹€μ œλ‘œ μ‚¬μš©λ˜λŠ” 둜또 μˆœμœ„μ˜ κ²°μ • λ°©μ‹κ³ΌλŠ” μ•½κ°„ λ‹€λ₯΄μ§€λ§Œ, 이 λ¬Έμ œμ—μ„œλŠ” 지문에 λͺ…μ‹œλœ λŒ€λ‘œ 둜또 μˆœμœ„λ₯Ό κ²°μ •ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

μˆœμœ„ 당첨 λ‚΄μš©
1 6개 λ²ˆν˜Έκ°€ λͺ¨λ‘ 일치
2 5개 λ²ˆν˜Έκ°€ 일치
3 4개 λ²ˆν˜Έκ°€ 일치
4 3개 λ²ˆν˜Έκ°€ 일치
5 2개 λ²ˆν˜Έκ°€ 일치
6(낙첨) κ·Έ μ™Έ

둜또λ₯Ό κ΅¬λ§€ν•œ λ―Όμš°λŠ” 당첨 번호 λ°œν‘œμΌμ„ ν•™μˆ˜κ³ λŒ€ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 민우의 동생이 λ‘œλ˜μ— λ‚™μ„œλ₯Ό ν•˜μ—¬, 일뢀 번호λ₯Ό μ•Œμ•„λ³Ό 수 μ—†κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 당첨 번호 λ°œν‘œ ν›„, λ―Όμš°λŠ” μžμ‹ μ΄ κ΅¬λ§€ν–ˆλ˜ 둜또둜 당첨이 κ°€λŠ₯ν–ˆλ˜ 졜고 μˆœμœ„μ™€ μ΅œμ € μˆœμœ„λ₯Ό μ•Œμ•„λ³΄κ³  μ‹Άμ–΄ μ‘ŒμŠ΅λ‹ˆλ‹€.
μ•Œμ•„λ³Ό 수 μ—†λŠ” 번호λ₯Ό 0으둜 ν‘œκΈ°ν•˜κΈ°λ‘œ ν•˜κ³ , λ―Όμš°κ°€ κ΅¬λ§€ν•œ 둜또 번호 6κ°œκ°€ 44, 1, 0, 0, 31 25라고 κ°€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 당첨 번호 6κ°œκ°€ 31, 10, 45, 1, 6, 19라면, 당첨 κ°€λŠ₯ν•œ 졜고 μˆœμœ„μ™€ μ΅œμ € μˆœμœ„μ˜ ν•œ μ˜ˆλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.


당첨 번호 31 10 45 1 6 19 κ²°κ³Ό
졜고 μˆœμœ„ 번호 31 0→10 44 1 0→6 25 4개 번호 일치, 3λ“±
μ΅œμ € μˆœμœ„ 번호 31 0→11 44 1 0→7 25 2개 번호 일치, 5λ“±
  • μˆœμ„œμ™€ 상관없이, κ΅¬λ§€ν•œ λ‘œλ˜μ— 당첨 λ²ˆν˜Έμ™€ μΌμΉ˜ν•˜λŠ” λ²ˆν˜Έκ°€ 있으면 맞힌 걸둜 μΈμ •λ©λ‹ˆλ‹€.
  • μ•Œμ•„λ³Ό 수 μ—†λŠ” 두 개의 번호λ₯Ό 각각 10, 6이라고 κ°€μ •ν•˜λ©΄ 3등에 당첨될 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 3등을 λ§Œλ“œλŠ” λ‹€λ₯Έ 방법듀도 μ‘΄μž¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 2λ“± μ΄μƒμœΌλ‘œ λ§Œλ“œλŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μ•Œμ•„λ³Ό 수 μ—†λŠ” 두 개의 번호λ₯Ό 각각 11, 7이라고 κ°€μ •ν•˜λ©΄ 5등에 당첨될 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 5등을 λ§Œλ“œλŠ” λ‹€λ₯Έ 방법듀도 μ‘΄μž¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 6λ“±(낙첨)으둜 λ§Œλ“œλŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

λ―Όμš°κ°€ κ΅¬λ§€ν•œ 둜또 번호λ₯Ό 담은 λ°°μ—΄ lottos, 당첨 번호λ₯Ό 담은 λ°°μ—΄ win_numsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ΄λ•Œ, 당첨 κ°€λŠ₯ν•œ 졜고 μˆœμœ„μ™€ μ΅œμ € μˆœμœ„λ₯Ό μ°¨λ‘€λŒ€λ‘œ 배열에 λ‹΄μ•„μ„œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œ 사항

  • lottosλŠ” 길이 6인 μ •μˆ˜ λ°°μ—΄μž…λ‹ˆλ‹€.
  • lottos의 λͺ¨λ“  μ›μ†ŒλŠ” 0 이상 45 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.
    • 0은 μ•Œμ•„λ³Ό 수 μ—†λŠ” 숫자λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
    • 0을 μ œμ™Έν•œ λ‹€λ₯Έ μˆ«μžλ“€μ€ lottos에 2개 이상 λ‹΄κ²¨μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • lottos의 μ›μ†Œλ“€μ€ μ •λ ¬λ˜μ–΄ μžˆμ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • win_nums은 길이 6인 μ •μˆ˜ λ°°μ—΄μž…λ‹ˆλ‹€.
  • win_nums의 λͺ¨λ“  μ›μ†ŒλŠ” 1 이상 45 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.
    • win_numsμ—λŠ” 같은 μˆ«μžκ°€ 2개 이상 λ‹΄κ²¨μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • win_nums의 μ›μ†Œλ“€μ€ μ •λ ¬λ˜μ–΄ μžˆμ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

 

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2
μ•Œμ•„λ³Ό 수 μ—†λŠ” λ²ˆν˜Έλ“€μ΄ μ•„λž˜μ™€ κ°™μ•˜λ‹€λ©΄, 1λ“±κ³Ό 6등에 당첨될 수 μžˆμŠ΅λ‹ˆλ‹€.

당첨 번호 38 19 20 40 15 25 κ²°κ³Ό
졜고 μˆœμœ„ 번호 0→38 0→19 0→20 0→40 0→15 0→25 6개 번호 일치, 1λ“±
μ΅œμ € μˆœμœ„ 번호 0→21 0→22 0→23 0→24 0→26 0→27 0개 번호 일치, 6λ“±

μž…μΆœλ ₯ 예 #3
λ―Όμš°κ°€ κ΅¬λ§€ν•œ 둜또의 λ²ˆν˜Έμ™€ 당첨 λ²ˆν˜Έκ°€ λͺ¨λ‘ μΌμΉ˜ν•˜λ―€λ‘œ, 졜고 μˆœμœ„μ™€ μ΅œμ € μˆœμœ„λŠ” λͺ¨λ‘ 1λ“±μž…λ‹ˆλ‹€.

 

 

πŸ”‘  문제 풀이

방법 1. ν•΄μ‹œ ν™œμš©

ν•΄μ‹œ(λ”•μ…”λ„ˆλ¦¬)λ₯Ό ν™œμš©ν•œ 풀이이닀.

def solution(lottos, win_nums):
    max_match, min_match = 0, 0
    lotto_rank = {
        6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6
    }

    for l in lottos:
        if l in win_nums:
            max_match += 1
            min_match += 1
        elif l == 0:
            max_match += 1

    answer = [lotto_rank[max_match], lotto_rank[min_match]]
    return answer

 

방법 2. 리슀트 ν™œμš©

리슀트의 인덱슀λ₯Ό ν™œμš©ν•˜μ—¬ 풀이λ₯Ό ν•  μˆ˜λ„ μžˆκΈ°μ— 리슀트둜 ν‘Ό 풀이λ₯Ό μ²¨λΆ€ν•œλ‹€.

  • .count()ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ 0의 개수λ₯Ό μ„Έκ³ , μ΅œκ³ μˆœμœ„μ—λŠ” κ·Έ 개수λ₯Ό λ”ν•˜μ—¬ returnν•œλ‹€.
  • μΌμΉ˜ν•˜λŠ” 개수λ₯Ό 인덱슀둜 μ„€μ •ν•˜μ—¬ μˆœμœ„λ₯Ό κ·Έ κ°’μœΌλ‘œ return ν•˜λ„λ‘ ν–ˆλ‹€.

개인적으둜 μΌμΉ˜ν•˜λŠ” 번호 개수λ₯Ό 인덱슀둜 μ„€μ •ν•œ 것 μžμ²΄κ°€ κΈ°λ°œν•œ ν’€μ΄μ˜€λ‹€κ³  μƒκ°ν•œλ‹€.

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]

 

 

 

πŸ’‘  What I learned

.count()

리슀트 λ‚΄μ˜ 개수 μ„ΈλŠ” ν•¨μˆ˜