[λ°±μ€][1931] νμμ€ λ°°μ | νμ΄μ¬
π λ¬Έμ λΆμ
ν κ°μ νμμ€μ΄ μλ€.
nκ°μ νμμ λν΄μ νμμ€ μ¬μ©νλ₯Ό λ§λ€λ €κ³ νλ€.
κ° νμμ λν΄ μμ μκ°κ³Ό λλλ μκ°μ΄ μ£Όμ΄μ§λ€.
νμκ° κ²ΉμΉμ§ μκ² νλ©΄μ νμμ€μ μ¬μ©ν μ μλ νμμ μ΅λ κ°μλ₯Ό μ°ΎμμΌ νλ€.
π μκ³ λ¦¬μ¦ μ€κ³
λλλ μκ°κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬
meeting = []μ μ
for i in range(1,n):
if start[i] ≥ end[i]:
numner_meeting +=1
π μ½λ
import sys
n= int(input())
meeting = []
for _ in range(n):
start, end = map(int,input().split())
meeting.append((start,end))
# μ’
λ£μκ°κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬νκ³ , μμμκ°μ μ€λ¦μ°¨μ μ λ ¬
meeting = sorted(meeting, key = lambda x: (x[1], x[0]))
end_time = meeting[0][1]
number_meeting = 1 # 첫λ²μ§Έ νμλ νμμ μΌλ‘ μ ννλ€. κ·Έλ¦¬κ³ 2λ²μ§Έ νμλΆν° λΉκ΅.
for i in range(1,n): # 0λ²μ§Έ κ°μλ 무쑰건 λ½νλκΉ μ²«λ²μ§Έ κ°μλΆν° λΉκ΅
if end_time <= meeting[i][0]: # end_timeμ΄ κ°μ μμ μκ°λ³΄λ€ μμΌλ©΄
end_time = meeting[i][1]
number_meeting +=1
print(number_meeting)
π μκ°λ³΅μ‘λ
O(NlogN)
π νλ¦° μ΄μ
μ κ·Ό λ°©μμ΄ νλ¦Ό
π νλ¦° λΆλΆ μμ or λ€λ₯Έ νμ΄
κ°μ₯ λ§μ νμμ μλ₯Ό μκΈ° μν΄μλ 빨리 λλλ νμ μμλλ‘ μ λ ¬ν΄μΌ νλ€.
첫λ²μ§Έ νμλ νμμ μ΄κΈ° λλ¬Έμ, number_meeting = 1 λ‘ μ ν΄μ€λ€.
π λλμ or κΈ°μ΅ν μ 보
sort ν¨μμ sorted ν¨μμ μκ°λ³΅μ‘λλ O(NlogN)μ΄λ€.
κ°μ₯ λ§μ νμμ μλ₯Ό μκΈ° μν΄μλ 빨리 λλλ νμ μμλλ‘ μ λ ¬ν΄μΌ νλ€.
첫λ²μ§Έ μ‘°κ±΄μ΄ λ¬΄μ‘°κ±΄ ν¬ν¨λλμ§ μλμ§λ₯Ό ꡬλ³νμ.