[BOJ][๐ŸŸก5][๋ฐฑ์ค€#19598] ์ตœ์†Œ ํšŒ์˜์‹ค ๊ฐœ์ˆ˜

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #19598


๋ฌธ์ œ

์„œ์ค€์ด๋Š” ์•„๋น ๋กœ๋ถ€ํ„ฐ N๊ฐœ์˜ ํšŒ์˜๋ฅผ ๋ชจ๋‘ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ํšŒ์˜์‹ค ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๋ฏธ์…˜์„ ๋ฐ›์•˜๋‹ค. ๊ฐ ํšŒ์˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๊ณ  ํ•œ ํšŒ์˜์‹ค์—์„œ ๋™์‹œ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ํšŒ์˜๊ฐ€ ์ง„ํ–‰๋  ์ˆ˜ ์—†๋‹ค.ย ๋‹จ, ํšŒ์˜๋Š” ํ•œ๋ฒˆ ์‹œ์ž‘๋˜๋ฉดย ์ค‘๊ฐ„์— ์ค‘๋‹จ๋  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•œ ํšŒ์˜๊ฐ€ ๋๋‚˜๋Š” ๊ฒƒ๊ณผ ๋™์‹œ์— ๋‹ค์Œ ํšŒ์˜๊ฐ€ ์‹œ์ž‘๋  ์ˆ˜ ์žˆ๋‹ค. ํšŒ์˜์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์€ย ๋๋‚˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ•ญ์ƒ ์ž‘๋‹ค. N์ด ๋„ˆ๋ฌด ์ปค์„œ ๊ดด๋กœ์›Œ ํ•˜๋Š” ์šฐ๋ฆฌ ์„œ์ค€์ด๋ฅผ ๋„์™€์ฃผ์ž.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฐฐ์—ด์˜ ํฌ๊ธฐย N(1 โ‰ค N โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N+1 ์ค„๊นŒ์ง€ย ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ํšŒ์˜์˜ ์‹œ์ž‘์‹œ๊ฐ„๊ณผ ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง„๋‹ค. ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋๋‚˜๋Š” ์‹œ๊ฐ„์€ 231โˆ’1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ตœ์†Œ ํšŒ์˜์‹ค ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

3
0 40
15 30
5 10


์ถœ๋ ฅ

2


์˜ˆ์ œ 2

์ž…๋ ฅ

2
10 20
5 10


์ถœ๋ ฅ

1


My Sol

import sys
input = sys.stdin.readline
from heapq import heappop, heappush

def main():
    def make_H():
        H = []
        for _ in range(N):
            s, e = map(int, input().split())
            heappush(H, (s, e))
        return H

    def count_place():
        cnt = 1
        K = []
        s, e = heappop(H)
        heappush(K, e)
        while H:
            s, e = heappop(H)
            if K[0] > s:
                cnt += 1
            else:
                heappop(K)
            heappush(K, e)

        return cnt

    N = int(input())
    H = make_H()
    return count_place()

print(main())

heapq๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  1. ๊ฐ ํšŒ์˜์‹ค ์ผ์ •์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๋ฐ, ์ด๋ฅผ heapq์— ๋‹ด๋Š”๋‹ค. (์‹œ์ž‘์‹œ๊ฐ„, ์ข…๋ฃŒ์‹œ๊ฐ„)์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ๋‹ค. ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” make_H ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  2. ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ H heapq์—์„œ ๊ฐ€์žฅ ๋นจ๋ฆฌ ์‹œ์ž‘ํ•  ํšŒ์˜๋ฅผ ๋งค๋ฒˆ ๊บผ๋‚ด๋ฉฐ ํ™•์ธ์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, ์ด๋ฅผ count_place ํ•จ์ˆ˜์—์„œ ์ง„ํ–‰ํ•œ๋‹ค.
  3. count_place ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” heapq K๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ์ž‘ํ•˜๋Š”๋ฐ, ์ด heapq๋Š” ์ข…๋ฃŒ์‹œ๊ฐ„์„ ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์ €์žฅํ•˜๋Š” heapq์ด๋‹ค. ์ฆ‰, H์—์„œ ๊บผ๋‚ธ ํšŒ์˜์‹ค ์ผ์ •์˜ ์‹œ์ž‘์‹œ๊ฐ„์ด K์˜ ๊ฐ€์žฅ ๋น ๋ฅธ ์ข…๋ฃŒ์‹œ๊ฐ„์˜ ํšŒ์˜๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€์ง€, ํ˜น์€ ํฐ์ง€์— ๋”ฐ๋ผ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  4. ๋งŒ์•ฝ K์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’, ์ฆ‰ ๊ฐ€์žฅ ๋นจ๋ฆฌ ๋๋‚˜๋Š” ํšŒ์˜ ์‹œ๊ฐ„์ด H์—์„œ ์ด์ œ ๊บผ๋‚ธ ํšŒ์˜ ์ผ์ •์˜ ์‹œ์ž‘์‹œ๊ฐ„๋ณด๋‹ค ํฌ๋ฉด ํ˜„์žฌ๊นŒ์ง€ ๋นŒ๋ฆฐ ๊ฐ•์˜์‹ค๋กœ๋Š” ์ปค๋ฒ„ํ•  ์ˆ˜๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ ๊ฐ•์˜์‹ค์„ ํ•˜๋‚˜ ๋” ๋นŒ๋ฆฐ๋‹ค๊ณ  ๊ฐ์•ˆํ•˜์—ฌ cnt๋ฅผ 1 ๋” ๋Š˜๋ ค์ฃผ๊ณ  e๋ฅผ K์— ๋„ฃ์–ด์ค€๋‹ค.
  5. ๋ฐ˜๋Œ€๋กœ K์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด H์˜ s๋ณด๋‹ค ์ž‘์œผ๋ฉด, ํ˜„์žฌ ๋“ฑ๋กํ•ด์•ผํ•˜๋Š” ํšŒ์˜์ผ์ •์— ๊ฐ€์šฉํ•œ ํšŒ์˜์‹ค์„ K์—์„œ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‹จ์ˆœํžˆ K์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ heap pop์„ ์ด์šฉํ•ด ์ œ๊ฑฐํ•˜๊ณ , ์‹ ๊ทœ ๋“ฑ๋ก๋œ ํšŒ์˜์˜ ์ข…๋ฃŒ์‹œ๊ฐ„ e๋ฅผ K์— ์ถ”๊ฐ€ํ•œ๋‹ค. cnt์˜ ์ฆ๊ฐ€๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
  6. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ H๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ํ•˜๊ณ , ๋ˆ„์ ๋œ cnt๋ฅผ ๋ฐ˜ํ™˜, ์ด๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

import sys, heapq
input = sys.stdin.readline

N = int(input())
schedules = sorted([list(map(int, input().split())) for _ in range(N)])
h = []
for start, end in schedules:
    if h and h[0] <= start:
        heapq.heappop(h)
    heapq.heappush(h, end)

print(len(h))

์—ฐ์‚ฐ์‹œ๊ฐ„์€ ๊ฐ™์ง€๋งŒ ์ฝ”๋“œ๊ธธ์ด๊ฐ€ ์งง์€ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋ ค ํ•œ๋‹ค. ์šฐ์„  ํšŒ์˜ ์ผ์ •์„ heapq์— ๋‹ด์ง€ ์•Š๊ณ  list์— ๋‹ด์•„ sortํ–ˆ๋‹ค. heapq์˜ ์ •๋ ฌ์€ O(nlogn)์ด๊ณ , list์˜ ์ •๋ ฌ์€ O(n2)์ด์ง€๋งŒ, ์€๊ทผํžˆ list์˜ ์ •๋ ฌ์ด ๊ฝค๋‚˜ ๋น ๋ฅด๋‹ค.

๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” for๋ฌธ์˜ ๊ณผ์ •์ธ๋ฐ ์–ด์ฐจํ”ผ cnt๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด์ค„ ํ•„์š” ์—†์ด heapq์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ์˜ ๋น„๊ต๋กœ heap์—์„œ pop์„ ํ•˜๋ฉด cnt๋Š” 1 ์ค„์–ด๋“ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•œ ํ’€์ด์ธ ๊ฒƒ ๊ฐ™๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ