We will find a way, we always have.

-interstellar

Problem Solving/λ°±μ€€

[λ°±μ€€] 9375번: νŒ¨μ…˜μ™• μ‹ ν•΄λΉˆ - 파이썬

Redddy 2022. 7. 7. 08:47

πŸ”ˆ 문제

ν•΄λΉˆμ΄λŠ” νŒ¨μ…˜μ— 맀우 λ―Όκ°ν•΄μ„œ ν•œλ²ˆ μž…μ—ˆλ˜ μ˜·λ“€μ˜ 쑰합을 μ ˆλŒ€ λ‹€μ‹œ μž…μ§€ μ•ŠλŠ”λ‹€. 예λ₯Ό λ“€μ–΄ 였늘 ν•΄λΉˆμ΄κ°€ μ•ˆκ²½, μ½”νŠΈ, μƒμ˜, μ‹ λ°œμ„ μž…μ—ˆλ‹€λ©΄, λ‹€μŒλ‚ μ€ 바지λ₯Ό μΆ”κ°€λ‘œ μž…κ±°λ‚˜ μ•ˆκ²½λŒ€μ‹  렌즈λ₯Ό μ°©μš©ν•˜κ±°λ‚˜ ν•΄μ•Όν•œλ‹€. ν•΄λΉˆμ΄κ°€ 가진 μ˜μƒλ“€μ΄ μ£Όμ–΄μ‘Œμ„λ•Œ κ³Όμ—° ν•΄λΉˆμ΄λŠ” μ•ŒλͺΈμ΄ μ•„λ‹Œ μƒνƒœλ‘œ λ©°μΉ λ™μ•ˆ 밖에 λŒμ•„λ‹€λ‹ 수 μžˆμ„κΉŒ?

 

πŸ“μž…λ ₯

첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ 주어진닀. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” μ΅œλŒ€ 100이닀. 

      -각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 첫째 μ€„μ—λŠ” ν•΄λΉˆμ΄κ°€ 가진 μ˜μƒμ˜ 수 n(0 ≤ n ≤ 30)이 주어진닀.
      -λ‹€μŒ nκ°œμ—λŠ” ν•΄λΉˆμ΄κ°€ 가진 μ˜μƒμ˜ 이름과 μ˜μƒμ˜ μ’…λ₯˜κ°€ 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 주어진닀. 같은 μ’…λ₯˜μ˜ μ˜μƒμ€ ν•˜λ‚˜            만 μž…μ„ 수 μžˆλ‹€.

λͺ¨λ“  λ¬Έμžμ—΄μ€ 1이상 20μ΄ν•˜μ˜ μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ μ΄λ£¨μ–΄μ ΈμžˆμœΌλ©° 같은 이름을 가진 μ˜μƒμ€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

πŸ“‘μΆœλ ₯

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄ ν•΄λΉˆμ΄κ°€ μ•ŒλͺΈμ΄ μ•„λ‹Œ μƒνƒœλ‘œ μ˜μƒμ„ μž…μ„ 수 μžˆλŠ” 경우λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.

 

πŸ“š ν’€μ΄

ν•΄μ‹œλ₯Ό μ‚¬μš©ν•œ 맡을 μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό ν’€ 수 μžˆλ‹€.

μ˜μƒμ˜(λ˜‘λ°”λ‘œ 읽어도 거꾸둜 읽어도 μ˜μƒμ˜! 기러기 ν† λ§ˆν†  μŠ€μœ„μŠ€ 인도인 별λ˜₯별 우영우!γ…Ž) 이름과 μ˜μƒμ˜ μ’…λ₯˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ˜μƒμ˜ μ’…λ₯˜κ°€ 총 λͺ‡κ°œμΈμ§€λ§Œ 카운트 ν•΄μ€€λ’€ κ³„μ‚°ν•˜λ©΄ λ˜μ—ˆλ‹€.

계산 방법은 이렇닀.

λ§Œμ•½ headgear 2개 eyewear 1κ°œκ°€ μžˆλ‹€κ³  κ°€μ •ν•  λ•Œ,

headgrear만 μ°©μš©ν•˜λŠ” 경우의 수 2개 + eyewear만 μ°©μš©ν•˜λŠ” 경우의 수 1개 + λ™μ‹œμ— μ°©μš©ν•˜λŠ” 경우의 수 2(2*1)개λ₯Ό λ”ν•œ 5κ°€ 정닡이 λœλ‹€.

이λ₯Ό κ°„λ‹¨νžˆ μ‹μœΌλ‘œ ν‘œν˜„ν•˜μžλ©΄ headgearλ₯Ό μ°©μš©ν•˜μ§€ μ•ŠλŠ” 경우의 μˆ˜κΉŒμ§€ ν¬ν•¨ν•œ 3 * eyewearλ₯Ό μ°©μš©ν•˜μ§€ μ•ŠλŠ” 경우의 μˆ˜κΉŒμ§€ ν¬ν•¨ν•œ 2 μ—μ„œ μ•ŒλͺΈμ΄ μ•„λ‹Œ μƒνƒœ 1 을 λΉΌμ£Όλ©΄ λœλ‹€.

(3*2)-1

 

πŸ’» μ½”λ“œ

import sys
input = sys.stdin.readline

for _ in range(int(input())): # ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€
    n = int(input()) # μ˜μƒμ˜ 갯수
    ans = 1
    cabinet = dict()
    for i in range(n):
        name, frac = map(str,input().rstrip().split())
        if frac not in cabinet.keys(): # 옷μž₯에 같은 μ’…λ₯˜μ˜ 옷이 μ—†λ‹€λ©΄
            cabinet[frac] = 1
        else: # 이미 μžˆλŠ” μ’…λ₯˜λΌλ©΄ +1
            cabinet[frac] += 1

    for k in cabinet.keys():
        ans *= cabinet[k]+1 # (μ’…λ₯˜μ˜ 갯수 + μž…μ§€ μ•ŠλŠ” 경우1)λ₯Ό μ „λΆ€ κ³±ν•œλ‹€.
    print(ans-1) # μ•ŒλͺΈμΈ 경우λ₯Ό μ œμ™Έ ν›„ 좜λ ₯

 

🍭 μ‹œν–‰μ°©μ˜€

도전!

μ˜ˆμ „ μŠ€ν„°λ””ν•  λ•ŒλŠ” μ‹€νŒ¨ν–ˆλ˜ λ¬Έμ œμ˜€λŠ”λ°, μ΄λ²ˆμ— λ³΄ν†΅μ˜ 취쀀생을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈμ±…μ„ μ½μœΌλ©΄μ„œ (μ •λ‹΅μ½”λ“œλŠ” 보지 μ•ŠμŒ!) λ‹€μ‹œ λ„μ „ν•΄λ³΄λ‹ˆ λ°”λ‘œ 정닡을 λ§žμΆ”μ—ˆλ‹€.

λΏŒλ“―γ…Ž

(3*2)-1 μ΄λŸ°μ‹μ„ μ΄μ „μ—λŠ” λ– μ˜¬λ¦¬μ§€ λͺ»ν•˜μ˜€λŠ”데, μ΄λ²ˆμ— ν’€λ•ŒλŠ” λ°”λ‘œ λ”± λ– μ˜¬λžλ‹€. μ‹ κΈ°ν•˜λ‹€ 이런게 μ„±μž₯?γ…‹γ…‹

μ € 419B 짜리 μ½”λ“œλŠ” dict[μ’…λ₯˜] = [이름1, 이름2, 이름3] 이런 μ‹μœΌλ‘œ μ €μž₯ν•˜μ—¬ 후에 len(dict[μ’…λ₯˜]) 이런 μ‹μœΌλ‘œ 연산을 ν•˜μ˜€λŠ”λ°, μƒκ°ν•΄λ³΄λ‹ˆ 이름을 ꡳ이 체크해쀄 ν•„μš”κ°€ μ—†μ—ˆλ‹€. 

κ·Έλž˜μ„œ dict[μ’…λ₯˜] = 3 μ΄λŸ°μ‹μœΌλ‘œ λ°”κΎΈμ–΄ μ£Όμ—ˆκ³  μ‹œκ°„μ΄ 더 λ‹¨μΆ•λ˜μ—ˆλ‹€.

408B 짜리 μ½”λ“œλŠ” 책에 λ‚˜μ˜¨ ν•΄λ‹΅μ΄λž‘ 거의 μΌμΉ˜ν•œλ‹€γ…Žγ…Ž

 

πŸ”— 문제링크 νŒ¨μ…˜μ™• μ‹ ν•΄λΉˆ

 

9375번: νŒ¨μ…˜μ™• μ‹ ν•΄λΉˆ

첫 번째 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” headgear에 ν•΄λ‹Ήν•˜λŠ” μ˜μƒμ΄ hat, turban이며 eyewear에 ν•΄λ‹Ήν•˜λŠ” μ˜μƒμ΄ sunglassesμ΄λ―€λ‘œ   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)둜 총 5가지 이닀.

www.acmicpc.net