백준 온라인 저지, 자료구조 / 21773번: 가희와프로세스1 (파이썬 / , 백준 골드문제)
2022. 1. 2. 00:14ㆍ알고리즘/자료구조
728x90
반응형
문제
가희는 스케쥴러를 구현하라는 과제를 받았습니다. 스케쥴러가 실행시킬 프로세스를 선택하는 기준은 아래와 같습니다.
- 우선 순위 값이 제일 큰 프로세스
- 우선 순위 값이 제일 큰 프로세스가 여러 개라면, id가 가장 작은 프로세스
가희가 만든 스케쥴러는 다음 알고리즘으로 실행됩니다.
- 실행시킬 프로세스를 기준에 따라 선택합니다. 선택된 프로세스의 id를 ids라 합니다. ids를 실행시킵니다.
- 1초가 지난 후, 프로세스 id가 ids인 프로세스를 제외한 나머지 프로세스들의 우선 순위가 1 상승합니다.
프로세스 id가 ids 인 프로세스의 실행을 마치는 데 필요한 시간은 1 감소합니다. - 실행 시간이 남은 프로세스가 있다면 1로 돌아가고, 그렇지 않으면 종료합니다.
동시에 실행되는 프로세스는 1개이고, 1초일 때 가희가 만든 스케쥴러는 최초로 선택한 프로세스를 실행시키는 작업을 합니다.
가희는 1초일 때 부터 T초일 때 까지, 스케쥴러가 선택한 프로세스의 id를 알고 싶습니다. 가희를 도와주세요.
입력
첫 번째 줄에 T, n이 주어집니다.
두 번째 줄 부터 n+1번째 줄까지 다음과 같은 형식으로 주어집니다.
Ai Bi Ci
이것은 i번째 process의 id가 Ai이고, 프로세스 id가 실행을 마치는 데 필요한 시간이 Bi초이고, 초기 우선 순위가 Ci임을 의미합니다.
출력
T개의 정수를 T개의 줄에 출력합니다.
i번째 줄에는 가희가 만든 스케쥴러가 i초가 되었을 때 선택한 프로세스의 id를 출력해 주세요.
제한
- 1 ≤ n ≤ 105
- 1 ≤ T ≤ min(프로세스들의 실행 시간 총 합, 106)
- 1 ≤ Ai, Bi, Ci ≤ 106
- 문제에 주어지는 프로세스의 id 값은 모두 다릅니다.
- 주어지는 값들은 모두 자연수입니다.
예제 입력 1
8 2 1 5 1 2 5 1
예제 출력 1
1 2 1 2 1 2 1 2
1초일 때 부터 4초일 때 상황을 그림으로 나타내면 아래와 같습니다. 아래 그림에서 주황색은 특정 시점에 스케쥴러가 선택한 프로세스를 의미합니다.
예제 입력 2
10 2 1 10 1000 2 10 1
예제 출력 2
1 1 1 1 1 1 1 1 1 1
접근 방법
- 0. 주어진 프로세스를 우선순위 값이 제일 큰 순으로 최대힙에 저장한다.
- 1. 매 초마다 최대힙에서 저장되어있는 값의 우선순위가 가장 높은 값을 id를 기준으로 하는 최소힙에 저장한다.
- 2. 최소힙에서 첫 원소를 뽑은 뒤, 우선순위를 감소시키고 id를 출력한다.
- 3. 위의 과정을 반복한다.
코드
# https://www.acmicpc.net/problem/21773
# 접근 방법
# 0. 주어진 프로세스를 우선순위 값이 제일 큰 순으로 최대힙에 저장한다.
# 1. 매 초마다 최대힙에서 저장되어있는 값의 우선순위가 가장 높은 값을 id를 기준으로 하는 최소힙에 저장한다.
# 2. 최소힙에서 첫 원소를 뽑은 뒤, 우선순위를 감소시키고 id를 출력한다.
# 3. 위의 과정을 반복한다.
import heapq, sys
input = sys.stdin.readline
t, n = map(int, input().split())
min_heap = []
max_heap = []
for _ in range(n):
a, b, c = map(int, input().split())
heapq.heappush(max_heap, [-c, a, b])
for _ in range(t):
if not min_heap:
priority = max_heap[0][0]
while max_heap and priority == max_heap[0][0]:
c, a, b = heapq.heappop(max_heap)
heapq.heappush(min_heap, [a, b, c])
a, b, c = heapq.heappop(min_heap)
if b - 1 > 0:
heapq.heappush(max_heap, [c+1, a, b-1])
print(a)
728x90
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
백준 온라인 저지, 자료구조 / 2164번: 카드2 (파이썬 / , 백준 실버문제) (0) | 2022.02.02 |
---|---|
백준 온라인 저지, 자료구조 / 1874번: 스택수열 (파이썬 / , 백준 실버문제) (0) | 2022.01.02 |
백준 온라인 저지, 자료구조 / 10845번: 큐 (파이썬 / , 백준 실버문제) (0) | 2021.12.23 |
백준 온라인 저지, 자료구조 / 23757번: 아이들과선물상자 (파이썬 / , 백준 실버문제) (0) | 2021.12.22 |
백준 온라인 저지, 자료구조 / 4949번: 균형잡힌세상 (파이썬 / , 백준 실버문제) (0) | 2021.12.22 |