πŸ’» Coding/[Algorithm]Python

λ°±μ€€ | 1931 νšŒμ˜μ‹€ λ°°μ •ν•˜κΈ°

🩷 민영 2024. 1. 22. 22:08

λ°±μ€€ | 1931 νšŒμ˜μ‹€ λ°°μ •ν•˜κΈ°

문제

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

μž…λ ₯

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

좜λ ₯

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

λ‚΄ μ •λ‹΅

N = int(input()) # 회의 수

data = [[0]*2 for _ in range(N)] # 회의 μ‹œκ°„ν‘œ
result = 1

for x in range(N):
    sta, end = map(int, input().split())
    data[x][0] = sta
    data[x][1] = end

# νšŒμ˜κ°€ λλ‚˜λŠ” μ‹œκ°„(x[1])을 κΈ°μ€€μœΌλ‘œ μ •λ ¬ ν›„ λ™μ‹œκ°„μΌλ•Œ μ‹œμž‘ μ‹œκ°„μ΄ 더 λΉ λ₯Έ κΈ°μ€€
data.sort(key = lambda x: (x[1], x[0]))

# κ°€μž₯ 빨리 νšŒμ˜κ°€ λλ‚˜λŠ” μ‹œκ°„ data[0][1]
end_time = data[0][1]
for i in range(1, N):
    # μ‹œμž‘μ‹œκ°„μ΄ λλ‚˜λŠ” μ‹œκ°„λ³΄λ‹€ λŠ¦κ±°λ‚˜ 같을 λ•Œ
    if data[i][0] >= end_time:
        result += 1
        end_time = data[i][1]

print(result)

이 문제λ₯Ό ν’€λ©° μ€‘μš”ν•œ 점은 λλ‚˜λŠ” μ‹œκ°„κ³Ό μ‹œμž‘ μ‹œκ°„ λͺ¨λ‘ 비ꡐλ₯Ό ν•΄μ•Όν•œλ‹€λŠ” 점이닀.