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

2021. 1. 24. 00:50γ†πŸ“š Algorithm/πŸ’ͺ🏻 Python 문제 풀이

λ°˜μ‘ν˜•

문제 μ„€λͺ…

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

μž…λ ₯ν˜•μ‹

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

좜λ ₯ν˜•μ‹

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

μž…μΆœλ ₯ μ˜ˆμ‹œ

풀이 κ³Όμ •

이 문제의 핡심은 회의λ₯Ό κ°€μž₯ 많이 ν•˜λ €λ©΄ κ°€μž₯ 일찍 λλ‚˜λŠ” 회의λ₯Ό νšŒμ˜μ‹€μ— λ„£μ–΄μ•Όν•œλ‹€λŠ” 것이닀.

κ·Έλž˜μ„œ λ‚˜λŠ” κ°€μž₯ 일찍 λλ‚˜λŠ” 회의순으둜 정렬을 ν•΄μ£Όμ—ˆλ‹€. λ§Œμ•½ λλ‚˜λŠ” μ‹œκ°„μ΄ 같은 것이 μ‘΄μž¬ν•œλ‹€λ©΄? μ‹œμž‘μ‹œκ°„μ΄ λΉ λ₯Έ 순으둜 μ •λ ¬ν•˜κ²Œ ν•˜μ˜€λ‹€. κ·Έ λ‹€μŒμ— 순차적으둜 listλ₯Ό κ²€μ‚¬ν•˜λ©°, startκ°€ end보닀 ν¬κ±°λ‚˜ 같은 κ²½μš°μ—λ§Œ endλ₯Ό λ„£μ–΄μ£ΌλŠ” μ‹μœΌλ‘œ for문을 κ²€μ‚¬ν•˜λ©΄ λ˜λŠ” λ¬Έμ œμ˜€λ‹€.

def solution(arr):
    answer = 0
    arr.sort(key=lambda k: (k[1], k[0]))
    end = 0
    for start, done in arr:
        if start >= end:
            answer += 1
            end = done
    return answer


n = int(input())
arr = []
for _ in range(n):
    arr.append(list(map(int, input().split())))

print(solution(arr))

 

 

λ°˜μ‘ν˜•