Problem Solving/BOJ & Programmers

[BOJ] 1931번: νšŒμ˜μ‹€ λ°°μ •

geum 2024. 11. 16. 08:33

✏️ 문제

ν•œ 개의 νšŒμ˜μ‹€μ΄ μžˆλŠ”λ° 이λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” N개의 νšŒμ˜μ— λŒ€ν•˜μ—¬ νšŒμ˜μ‹€ μ‚¬μš©ν‘œλ₯Ό λ§Œλ“€λ €κ³  ν•œλ‹€. 각 회의 I에 λŒ€ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ Έ 있고, 각 νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό μ°Ύμ•„λ³΄μž. 단, νšŒμ˜λŠ” ν•œλ²ˆ μ‹œμž‘ν•˜λ©΄ 쀑간에 쀑단될 수 μ—†μœΌλ©° ν•œ νšŒμ˜κ°€ λλ‚˜λŠ” 것과 λ™μ‹œμ— λ‹€μŒ νšŒμ˜κ°€ μ‹œμž‘λ  수 μžˆλ‹€. 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 같을 μˆ˜λ„ μžˆλ‹€. 이 κ²½μš°μ—λŠ” μ‹œμž‘ν•˜μžλ§ˆμž λλ‚˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€.

 

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

 

πŸ’‘ 풀이

μ˜ˆμ „μ— ν’€μ—ˆλ˜ 문제인데 λ°±μ€€ 1374번: κ°•μ˜μ‹€, 11000번: νšŒμ˜μ‹€ λ°°μ •κ³Ό 거의 λ˜‘κ°™μ€ 둜직으둜 풀이 κ°€λŠ₯ν•œ 그리디 μœ ν˜•μ΄λ‹€.

 

μ½”λ“œλ₯Ό λ‹€μ‹œ λ³΄λ‹ˆκΉŒ μ–΄μ œ μ •λ¦¬ν•œ κ°•μ˜μ‹€ λ¬Έμ œμ™€μ˜ 차이점은 μ •λ ¬ κΈ°μ€€μ΄μ—ˆλ‹€. μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•  λ•Œμ™€ μ’…λ£Œ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•  λ•Œ μ–΄λ–€ λΆ€λΆ„μ—μ„œ 차이가 μžˆλŠ” 거지?

 

πŸ‘©‍πŸ’» μ½”λ“œ

import sys

input = sys.stdin.readline

N = int(input())

meetings = []

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

meetings.sort(key=lambda x: (x[1], x[0]))

first_meeting = meetings[0]

meeting_end = first_meeting[1]

answer = 1

for i in range(1, len(meetings)):
    if meetings[i][0] >= meeting_end:
        answer += 1
    
        meeting_end = meetings[i][1]

print(answer)