[BOJ] #11000 ๊ฐ•์˜์‹ค ๋ฐฐ์ • (Python, ์šฐ์„ ์ˆœ์œ„ ํ, ๊ทธ๋ฆฌ๋””)

    ๋ฐ˜์‘ํ˜•

    ๐ŸŒฑ ๋ฌธ์ œ

     

    11000๋ฒˆ: ๊ฐ•์˜์‹ค ๋ฐฐ์ •

    ์ฒซ ๋ฒˆ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 200,000) ์ดํ›„ N๊ฐœ์˜ ์ค„์— Si, Ti๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 ≤ Si < Ti ≤ 109)

    www.acmicpc.net

     

    ๐ŸŒฑ ํ’€์ด

    ์šฐ์„ ์ˆœ์œ„ ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

    1. ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ

    class_times = [list(map(int, input().split())) for _ in range(n)]
    class_times.sort(key = lambda x: x[0])
    • ์šฐ์„  ์ˆœ์œ„ ํ์— ์‚ฝ์ž… ํ•˜๊ธฐ ์ด์ „์— ์šฐ์„ , ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ•์˜ ์‹œ๊ฐ„์„ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ ์ด์œ ๋Š” ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
      • ์•„๋ž˜์—์„œ ์ •๋ ฌ ์—†์ด ํ์— ์‚ฝ์ž…ํ•œ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ๊ฐ•์˜์‹ค์˜ ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด 8๋กœ ํ์— ์‚ฝ์ž…๋˜๋ฉฐ, 2-5 ๊ฐ•์˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฐ•์˜์‹ค์— ์‚ฝ์ž…๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
      • ๋”ฐ๋ผ์„œ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ํ•œ ํ›„์— ์•ž์„œ ์‚ฝ์ž…๋œ ๊ฐ•์˜์˜ ๋๋‚˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ˜„์žฌ ์‚ฝ์ž…ํ•  ๊ฐ•์˜์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์•ž์„  ๊ฐ•์˜๋ฅผ ๋นผ๋‚ด๊ณ  ํ˜„์žฌ ๊ฐ•์˜๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๊ฐ•์˜๋ฅผ ์ด์–ด๋‚˜๊ฐ‘๋‹ˆ๋‹ค.

    2. ๊ฐ•์˜์‹ค ๊ฐœ์ˆ˜ ๊ณ„์‚ฐํ•˜๊ธฐ

    queue = []
    for time in class_times:
        if queue and queue[0]  <= time[0]:
            heapq.heappop(queue)
        heapq.heappush(queue, time[1])
    • queue์—๋Š” ๊ฐ•์˜๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„์„ ๋„ฃ์œผ๋ฉฐ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ๋งŒ๋“ค์–ด์„œ ํ•ญ์ƒ ๊ฐ€์žฅ ๋นจ๋ฆฌ ๋๋‚˜๋Š” ๊ฐ•์˜์‹œ๊ฐ„์ด ๋งจ ์•ž์ชฝ์— ์žˆ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ•์˜ ์‹œ๊ฐ„์„ ๋ณด๋ฉด์„œ ๊ฐ•์˜ ์‹œ์ž‘์‹œ๊ฐ„์ด ํ˜„์žฌ ํ์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ์˜ ๊ฐ’(queue[0])๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ๊ฐ•์˜์‹ค์„ ๋” ๋ฐฐ์ •๋ฐ›์ง€ ์•Š๊ณ  ํ•ด๋‹น ๊ฐ•์˜์‹ค์—์„œ ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ํ์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ popํ•˜๊ณ  ๊ฐ•์˜๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„(time[1])์„ pushํ•ฉ๋‹ˆ๋‹ค.

    3. ์ •๋‹ต์ถœ๋ ฅ

    print(len(queue))
    • queue๋Š” ๊ฐ ๊ฐ•์˜์‹ค์—์„œ ์ง„ํ–‰๋œ ๋งˆ์ง€๋ง‰ ๊ฐ•์˜์˜ ๋๋‚˜๋Š” ์‹œ๊ฐ„๋“ค์„ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ์˜ ๊ธธ์ด๊ฐ€ ์ „์ฒด ๊ฐ•์˜์‹ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

     

    ๐ŸŒฑ ์ฝ”๋“œ

    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    # boj 11000 ๊ฐ•์˜์‹ค ๋ฐฐ์ •
    
    import sys
    import heapq
    
    input = sys.stdin.readline
    n = int(input().rstrip())
    class_times = [list(map(int, input().split())) for _ in range(n)]
    class_times.sort(key = lambda x: x[0])
    
    queue = []
    for time in class_times:
        # queue[0]: ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ๊ฐ•์˜ ์ค‘์— ๊ฐ€์žฅ ๋นจ๋ฆฌ ๋๋‚˜๋Š” ๊ฐ•์˜ ์‹œ๊ฐ„
        if queue and queue[0]  <= time[0]:
            heapq.heappop(queue)
        heapq.heappush(queue, time[1])
    
    print(len(queue))

     

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€