PS

[λ°±μ€€] 12788 제 2회 IUPCλŠ” 잘 개졜될 수 μžˆμ„κΉŒ? with Python

ν˜•μ€€_It's 2022. 3. 16. 18:16
728x90
λ°˜μ‘ν˜•

πŸ“Œ BOJ 12788 제 2회 IUPCλŠ” 잘 개졜될 수 μžˆμ„κΉŒ?

πŸ’‘ 쑰건

  1. λŒ€νšŒ 개졜λ₯Ό μœ„ν•œ μ˜ˆμ‚°μ„ 아끼기 μœ„ν•˜μ—¬ νŽœμ„ κ΅¬λ§€ν•˜μ§€ μ•Šκ³  CTPνšŒμ›λ“€μ—κ²Œ νŽœμ„ 빌리기둜 ν•˜μ˜€λ‹€.

  2. CTPμ—λŠ” Nλͺ…μ˜ νšŒμ›λ“€μ΄ μ‘΄μž¬ν•˜λ©° 각각의 νšŒμ›λ“€μ˜ 필톡에 λ“€μ–΄μžˆλŠ” 펜의 κ°œμˆ˜λŠ” λͺ¨λ‘ λ‹€λ₯΄λ‹€.
    μ •μ€μ΄λŠ” μ—¬λŸ¬λͺ…μ˜ νšŒμ›μ—κ²Œ νŽœμ„ 빌릴경우 νŽœμ„ λŒλ €μ£ΌκΈ°μ— λ²ˆκ±°λ‘­λ‹€κ³  μƒκ°ν•˜μ—¬ μ΅œμ†Œν•œμ˜ νšŒμ›λ“€μ—κ²Œ νŽœμ„ 빌렀 μ°Έκ°€μžλ“€μ—κ²Œ λ‚˜λˆ„μ–΄ μ£Όλ €κ³  ν•œλ‹€.

  3. λŒ€νšŒμ— μ°Έκ°€ν•˜λŠ” μ°Έκ°€μžλ“€μ€ νŒ€μ„ κ΅¬μ„±ν•΄μ„œ μ°Έκ°€ν•˜λŠ”λ° λͺ¨λ“  νŒ€μ›μ—κ²Œ νŽœμ„ μ§€κΈ‰ν•΄μ•Όν•œλ‹€.

  4. ν•œ νŒ€μ΄ kλͺ…μ˜ νŒ€μ›μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμ„λ•Œ λͺ‡ λͺ…μ˜ νšŒμ›λ“€μ—κ²Œ νŽœμ„ λΉŒλ €μ•Όν•˜λŠ”μ§€ 좜λ ₯ν•˜λŠ” 문제.

  5. CTP의 νšŒμ›μˆ˜ N(1 ≀ N ≀ 1,000)
    λŒ€νšŒμ— μ°Έκ°€ν•œ νŒ€μ˜ 수 M(1 ≀ M ≀ 1,000)
    νŒ€μ„ κ΅¬μ„±ν•˜λŠ”λ° ν•„μš”ν•œ νŒ€μ›μ˜ 수 K(1 ≀ K ≀ 10)
    각각의 CTP νšŒμ›λ“€μ΄ κ°€μ§€κ³  μžˆλŠ” 펜의 수 A(0 ≀ A ≀ 100)

  6. λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° μœ ν˜•μ˜ 문제

πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

from sys import stdin

n = int(stdin.readline())
m, k = map(int, stdin.readline().split())
arr = list(map(int, stdin.readline().split()))
arr.sort(reverse=True)

need_pens = m * k

cnt = 0
for i in range(n):
    if need_pens == 0:
        break

    if need_pens - arr[i] > -1:
        cnt += 1
        need_pens -= arr[i]

    elif need_pens - arr[i] < 0:
        cnt += 1
        need_pens -= arr[i]
        break

print("STRESS") if need_pens > 0 else print(cnt)

πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

예제

7
36 3
9 70 15 13 19 20 11

μ‹€ν–‰κ²°κ³Ό

3

⌨️ 문제 풀이

  1. μž…λ ₯ 받은 배열을 μ •λ ¬ν•œ λ’€, n크기의 배열을 μˆœνšŒν•œλ‹€.

  2. ν•„μš”ν•œ 펜의 수(m * k)μ—μ„œ arr[i] λ₯Ό λΊ€ κ²°κ³Όκ°€ λ§Œμ•½

    • -1보닀 크닀면, cnt + 1, need_pens - arr[i]
    • 0보닀 μž‘λ‹€λ©΄, cnt + 1, need_pens - arr[i]
  3. need_pensrk > 0 일 경우, STRESSλ₯Ό 좜λ ₯ν•˜κ³  κ·Έ λ°˜λŒ€μ˜ 경우 cntλ₯Ό 좜λ ₯ν•œλ‹€.

πŸ’Ύ λŠλ‚€μ 

λ°˜μ‘ν˜•