[λ°±μ€ 1931λ²] [π₯1] νμμ€ λ°°μ (python)
λ¬Έμ
ν κ°μ νμμ€μ΄ μλλ° μ΄λ₯Ό μ¬μ©νκ³ μ νλ 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) λ₯Ό μ΄μ©ν μ μλ€.
νμ΄
- μ λ ₯ λ°μ νμλ€μ μ’ λ£ μκ°μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬
- κ°μ₯ 빨리 λλλ νμλ₯Ό μ ννκ³ μ νλ νμμ μ’ λ£ μκ°μ λ³μ end_timeμ μ μ₯
- λλ¨Έμ§ νμλ€μ μννλ©΄μ, ν΄λΉ νμμ μμ μκ°μ΄ end_timeλ³΄λ€ ν¬κ±°λ κ°μ κ²½μ°μλ§ νμλ₯Ό μ ν
- μ νλ νμμ μ’ λ£ μκ°μ λ€μ end_timeμ μ μ₯
- μ νλ νμμ μλ₯Ό μΉ΄μ΄νΈ
μ½λ
ver(1) - Greedy μ¬μ©
μκ° λ³΅μ‘λλ O(nlogn)
n = int(input())
# νμ μΌμ μ 리μ€νΈμ 리μ€νΈλ‘ μ
λ ₯λ°μ΅λλ€.
t = [list(map(int, input().split())) for _ in range(n)]
# νμ μΌμ μ λ μκ°μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νκ³ , λ μκ°μ΄ κ°μ κ²½μ° μμ μκ°μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν©λλ€.
t.sort(key=lambda x: (x[1], x[0]))
cnt = 0 # μ΅λλ‘ μμ½ν μ μλ νμ μλ₯Ό μΈλ λ³μμ
λλ€.
last = 0 # λ§μ§λ§μΌλ‘ μ νλ νμμ λ μκ°μ κΈ°λ‘νλ λ³μμ
λλ€.
for i, j in t:
# νμ¬ νμμ μμ μκ°μ΄ λ§μ§λ§μΌλ‘ μ νλ νμμ λ μκ°λ³΄λ€ ν¬κ±°λ κ°μΌλ©΄
if i >= last:
cnt += 1 # μμ½λ νμ μλ₯Ό μ¦κ°μν΅λλ€.
last = j # λ§μ§λ§μΌλ‘ μ νλ νμμ λ μκ°μ νμ¬ νμμ λ μκ°μΌλ‘ μ
λ°μ΄νΈν©λλ€.
print(cnt) # μ΅λλ‘ μμ½ν μ μλ νμ μλ₯Ό μΆλ ₯ν©λλ€.
λκΈλ¨κΈ°κΈ°