Problem Solving/[ν•­ν•΄99] TIL

99클럽 μ½”ν…Œ μŠ€ν„°λ”” 19일차 TIL / 그리디

geum 2024. 11. 15. 23:34

✏️ 문제

[λ°±μ€€/BOJ] 1374번: κ°•μ˜μ‹€(https://www.acmicpc.net/problem/1374)

 

N개의 κ°•μ˜κ°€ μžˆλ‹€. μš°λ¦¬λŠ” λͺ¨λ“  κ°•μ˜μ˜ μ‹œμž‘ν•˜λŠ” μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ„ μ•Œκ³  μžˆλ‹€. μ΄λ•Œ, μš°λ¦¬λŠ” μ΅œλŒ€ν•œ 적은 수의 κ°•μ˜μ‹€μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  κ°•μ˜κ°€ μ΄λ£¨μ–΄μ§€κ²Œ ν•˜κ³  μ‹Άλ‹€.

λ¬Όλ‘ , ν•œ κ°•μ˜μ‹€μ—μ„œλŠ” λ™μ‹œμ— 2개 μ΄μƒμ˜ κ°•μ˜λ₯Ό 진행할 수 μ—†κ³ , ν•œ κ°•μ˜μ˜ μ’…λ£Œμ‹œκ°„κ³Ό λ‹€λ₯Έ κ°•μ˜μ˜ μ‹œμž‘μ‹œκ°„μ΄ κ²ΉμΉ˜λŠ” 것은 상관없닀. ν•„μš”ν•œ μ΅œμ†Œ κ°•μ˜μ‹€μ˜ 수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

πŸ€– μž…μΆœλ ₯ μ˜ˆμ‹œ

 

🧐 λ‚œμ΄λ„/μ†Œμš” μ‹œκ°„

βœ… λ‚œμ΄λ„: solved.ac κΈ°μ€€ G5

βœ… μ†Œμš” μ‹œκ°„: 59λΆ„

βœ… ꢌμž₯ μ‹œκ°„: 1μ‹œκ°„ 30λΆ„

 

πŸ’‘ 풀이

1) 문제 이해

λ°±μ€€ 11000번: κ°•μ˜μ‹€ λ°°μ • λ¬Έμ œμ™€ λ™μΌν•˜λ‹€. 이 문제λ₯Ό ν’€ λ•Œ 'μš°μ„ μˆœμœ„ 큐' κ°œλ…κ³Ό 'μ΅œμ†Œ νž™' κ°œλ…μ„ μ•Œκ²Œ λλŠ”λ°, 이 λ¬Έμ œμ—μ„œλ„ μ € κ°œλ…λ“€μ΄ μ“°μ˜€λ‹€.

 

2) 아이디어 흐름

β‘  κ°•μ˜ μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ •λ ¬

 

β‘‘ μ΅œμ†Œ νž™ μ΄ˆκΈ°ν™”

 

β‘’ κ°•μ˜ μ‹œκ°„ 리슀트λ₯Ό μˆœνšŒν•˜λ©΄μ„œ ν˜„μž¬ κ°•μ˜ μ‹œμž‘ μ‹œκ°„이 κ°€μž₯ μ΄λ₯Έ μ’…λ£Œ μ‹œκ°„보닀 ν¬κ±°λ‚˜ κ°™λ‹€λ©΄ κ°•μ˜μ‹€ μž¬μ‚¬μš©

 

β‘£ ν˜„μž¬ κ°•μ˜ μ’…λ£Œ μ‹œκ°„μ„ νž™μ— μΆ”κ°€

 

일단은 κ°„λž΅ν•˜κ²Œ 적어두고 λ‚˜μ€‘μ— μˆ˜μ •...!

 

3) κ΅¬ν˜„

import sys
import heapq

input = sys.stdin.readline

N = int(input())

lectures = []

for _ in range(N):
    _, start, end = map(int, input().split())
    
    lectures.append((start, end))

lectures.sort()

# μ΅œμ†Œ νž™ μ΄ˆκΈ°ν™”
rooms = []

for start, end in lectures:
    # ν˜„μž¬ κ°•μ˜ μ‹œμž‘ μ‹œκ°„μ΄ κ°€μž₯ 이λ₯Έ μ’…λ£Œ μ‹œκ°„λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™λ‹€λ©΄ κ°•μ˜μ‹€ μž¬μ‚¬μš©
    if rooms and rooms[0] <= start:
        heapq.heappop(rooms)
    
    # ν˜„μž¬ κ°•μ˜ μ’…λ£Œ μ‹œκ°„μ„ νž™μ— μΆ”κ°€
    heapq.heappush(rooms, end)

print(len(rooms))

 

4) μ–΄λ €μ› λ˜ 점/배운 μ 

🚨 μ–΄λ €μ› λ˜ 점

  • κ°•μ˜μ‹€ λ°°μ • λ¬Έμ œμ™€ λ˜‘κ°™λ‹€λŠ” 것과 μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•΄μ•Ό ν•œλ‹€λŠ” κ±Έ λ°”λ‘œ λ– μ˜¬λ Έμ§€λ§Œ μš°μ„ μˆœμœ„ 큐λ₯Ό 써야 ν•˜λŠ” 건 λ°”λ‘œ λ– μ˜¬λ¦¬μ§€ λͺ»ν–ˆλ‹€.

❗ 배운 점

  • μš°μ„ μˆœμœ„ 큐의 κ°œλ…κ³Ό λ™μž‘ 방식에 λŒ€ν•΄ 깊게 곡뢀해볼 ν•„μš”κ°€ μžˆλ‹€.