Algorithm

[Python] λ°±μ€€ 1931 - νšŒμ˜μ‹€ λ°°μ •

πŸ₯­Mango 2021. 2. 10. 21:55

문제

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

 

μž…λ ₯

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

 

좜λ ₯

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


μ •λ‹΅

n = int(input())
meet = []

for _ in range(n):
    s, e = map(int, input().split())
    meet.append([s, e])

#λλ‚˜λŠ” μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬
meet.sort(key=lambda x : (x[1], x[0]))

count = 0
last = 0

for s, e in meet:
    if s >= last:
        last = e
        count += 1

print(count)

λ¨Όμ € 회의의 수(n)λ₯Ό μž…λ ₯λ°›μ•„μ£Όκ³ 

회의의 정보λ₯Ό meetμ΄λΌλŠ” λ¦¬μŠ€νŠΈμ— μ‹œμž‘μ‹œκ°„(s)κ³Ό λλ‚˜λŠ” μ‹œκ°„(e)λ₯Ό 리슀트 ν˜•νƒœλ‘œ μ§‘μ–΄λ„£μ–΄μ£Όκ³ 

λλ‚˜λŠ” μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•΄μ£Όμ—ˆλŠ”λ°, λλ‚˜λŠ” μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ 정렬을 ν•΄μ•Ό 회의의 μ΅œλŒ€ 개수λ₯Ό μ•Œ 수 있기 λ•Œλ¬Έμ΄λ‹€.

κ·Έ λ‹€μŒ μ‹œμž‘μ‹œκ°„μ΄ λλ‚˜λŠ” μ‹œκ°„κ³Ό κ°™κ±°λ‚˜ 크닀면 카운트λ₯Ό μ¦κ°€μ‹œμΌœμ£Όκ³ , last의 값을 λλ‚˜λŠ” μ‹œκ°„μœΌλ‘œ λ°”κΏ”μ€€λ‹€.