ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

11000번: κ°•μ˜μ‹€ λ°°μ •

첫 번째 쀄에 N이 주어진닀. (1 ≤ N ≤ 200,000) 이후 N개의 쀄에 Si, Tiκ°€ 주어진닀. (1 ≤ Si < Ti ≤ 109)

www.acmicpc.net

 

문제 풀이

예제 μž…λ ₯ 1의 경우의 수

 μœ„μ˜ κ·Έλ¦Όκ³Ό 같이 예제 μž…λ ₯ 1의 경우, μ΅œμ†Œλ‘œ ν•„μš”ν•œ κ°•μ˜μ‹€ κ°œμˆ˜κ°€ 2κ°œμž„μ„ μ•Œ 수 μžˆλ‹€. 이λ₯Ό κ³„μ‚°ν•˜λŠ” 방법은 μ–΄λ ΅κ²Œ 생각할 ν•„μš” 없이, κ°•μ˜ μ‹œμž‘ μ‹œκ°„μ— ν•„μš”ν•œ κ°•μ˜μ‹€ 수λ₯Ό μ¦κ°€μ‹œν‚€κ³ , κ°•μ˜κ°€ λλ‚˜λ©΄ ν•„μš”ν•œ κ°•μ˜μ‹€ 수λ₯Ό κ°μ†Œμ‹œν‚¨λ‹€. μ΄λ•Œ, κ°•μ˜μ‹€ 수의 μ΅œλŒ€ 값을 κ΅¬ν•˜λ©΄ ν•„μš”ν•œ μ΅œμ†Œ κ°•μ˜μ‹€ 수λ₯Ό ꡬ할 수 μžˆλ‹€.

 

 λ¬Έμ œλ₯Ό ν’€κΈ° μœ„ν•΄μ„œ μ£Όμ˜ν•  점이라면, μž…λ ₯λ˜λŠ” κ°•μ˜ μ‹œμž‘ 끝 μ‹œκ°„μ— μ‹œμž‘μΈ κ²½μš°λŠ” +1, 끝인 κ²½μš°λŠ” -1κ³Ό 같이 짝을 지어 λ”°λ‘œ κ΅¬μ„±ν•œλ‹€. κ·Έ ν›„, 정렬을 ν•  λ•Œ 2가지 κΈ°μ€€μœΌλ‘œ 정렬을 μ§„ν–‰ν•˜μ—¬μ•Ό ν•˜λŠ”λ° 첫 λ²ˆμ§ΈλŠ” μ‹œκ°„, 두 λ²ˆμ§ΈλŠ” +1인지, -1인지λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜μ—¬μ•Ό ν•œλ‹€. (-1인 경우λ₯Ό λ¨Όμ € μ²˜λ¦¬ν•˜μ—¬μ•Ό μ΅œμ†Œ νšŒμ˜μ‹€μ˜ 개수λ₯Ό ꡬ할 수 μžˆλ‹€.)

 

μ½”λ“œ

from sys import stdin


if __name__ == "__main__":
    answer = 0
    N = int(stdin.readline())
    cnt = 0
    meeting = [0 for _ in range(N * 2)]

    idx = 0
    for start, end in [list(map(int, stdin.readline().split())) for _ in range(N)]:
        meeting[idx] = [start, 1]
        meeting[idx + 1] = [end, -1]
        idx += 2

    meeting.sort(key=lambda x: (x[0], x[1]))

    for _, state in meeting:
        cnt += state
        answer = max(answer, cnt)

    print(answer)

 μ΄μ™€ λ™μΌν•œ μ½”λ“œλ‘œ 19598: μ΅œμ†Œ νšŒμ˜μ‹€ κ°œμˆ˜λ„ ν’€ 수 μžˆλ‹€.

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€