πŸ“š Study/Baekjoon

[Gold V] 1931 - νšŒμ˜μ‹€ λ°°μ •

윰갱 2025. 5. 10. 20:09

문제

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

μž…λ ₯

첫째 쀄에 회의의 수 N(1 ≤ N ≤ 100,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N+1 μ€„κΉŒμ§€ 각 회의의 정보가 μ£Όμ–΄μ§€λŠ”λ° 이것은 곡백을 사이에 두고 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ§„λ‹€. μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ€ 231-1보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ λ˜λŠ” 0이닀.

좜λ ₯

첫째 쀄에 μ΅œλŒ€ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 λ³΅μ‚¬

11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14

예제 좜λ ₯ 1 λ³΅μ‚¬

4

힌트

(1,4), (5,7), (8,11), (12,14) λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.


# 풀이 방법

이전에도 κ·Έλž¬λ“―μ΄ λλ‚˜λŠ” μ‹œκ°„μœΌλ‘œ sortν•˜λŠ”κ±Έ λ– μ˜¬λ¦¬λŠ”κ²Œ λ―Έμˆ™ν–ˆλ‹€.

자꾸 λͺ¨λ“  κ²½μš°μ— λŒ€ν•΄ λ‹€ 해봐야 ν•˜λ‚˜ (2^N 경우의 수) μ˜³μ§€ λͺ»ν•œ μƒκ°λ§Œ λ“€μ—ˆλ‹€.

(λλ‚˜λŠ” μ‹œκ°„, μ‹œμž‘ν•˜λŠ” μ‹œκ°„)에 sortν•΄μ„œ κ΅¬ν•˜λ©΄ μ΅œλŒ€ 회의 수λ₯Ό κ΅¬ν•˜λŠ”κ±΄ μ–΄λ ΅μ§€ μ•Šμ•˜λ‹€.


# μ½”λ“œ

# 2025-05-10 19:30 - 20:00
import sys
sys.stdin = open("input.txt","r")

n = int(sys.stdin.readline().strip())
meetings = []
for _ in range(n):
    s, e = map(int, sys.stdin.readline().split())
    meetings.append((s,e))

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

s, e = meetings[0]
cnt = 1
for meeting in meetings[1:]:
    s_tmp, e_tmp = meeting
    if e <= s_tmp:
        e = e_tmp
        cnt += 1

print(cnt)

# 참고사항

μ²˜μŒμ—λŠ” 회의 μ‹œμž‘μ— λŒ€ν•΄μ„œλŠ” ν•˜μ§€ μ•Šμ•˜λ”λ‹ˆ ν‹€λ ΈμŠ΅λ‹ˆλ‹€ κ²°κ³Όκ°€ λ‚˜μ™”λ‹€.

κ·Έ μ΄μœ λŠ” 예λ₯Ό λ“€μ–΄ μ•„λž˜ (μ‹œμž‘μ‹œκ°„=λλ‚˜λŠ”μ‹œκ°„)이 같은 경우 회의의 수λ₯Ό λ”ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

λ°˜λ‘€

2
2 2
1 2

κ·Έ 경우λ₯Ό κ³ λ €ν•˜μ§€ μ•Šμ•„ μ•„λž˜ μ½”λ“œκ°€ 틀리닀.

# 2025-05-10 19:30 - 20:00
import sys
sys.stdin = open("input.txt","r")

n = int(sys.stdin.readline().strip())
meetings = []
for _ in range(n):
    s, e = map(int, sys.stdin.readline().split())
    meetings.append((s,e))

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

s, e = meetings[0]
cnt = 1
for meeting in meetings[1:]:
    s_tmp, e_tmp = meeting
    if e <= s_tmp:
        e = e_tmp
        cnt += 1

print(cnt)