[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))

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€