Algorithm/백준_생각정리
백준_21773_가희와 프로세스 1(python)
코친남
2023. 6. 23. 14:45
★ 접근법
문제에서 우선순위가 높은 프로세스 기준 프로세스가 같다면 id가 작은 것이 우선이라고 했을 때 => 우선순위, 최대 십만크기 바로 heapq를 떠올렸다.
★ 풀이법
나머지 프로세스의 우선순위를 1 증가시키는 방법만 떠올린다면 말도 안되게 쉬운 문제이다.
그대로 구현하면 최대 백만 초 * 최대 십만 개의 프로세스이기 때문에 시간초과가 발생한다.
나머지 프로세스의 우선순위를 1 증가시키는 것이 아닌 자신의 프로세스를 1 감소시키는 것이다. 우선순위는 상대적이기 때문에 나의 우선순위를 1 감소시키면 자연스럽게 나머지 프로세스의 우선순위가 1 증가된 것처럼 보인다.
- 코드
import sys,heapq
input = sys.stdin.readline
t,n = map(int,input().split())
data = []
for _ in range(n):
a,b,c = map(int,input().split())
heapq.heappush(data,[-c,a,b])
for _ in range(t):
cc, ca, cb = heapq.heappop(data)
cc = -cc # 생각하기 쉽게 잠시 양수로
print(ca)
if cb -1 > 0:
heapq.heappush(data,[-cc+1, ca , cb - 1])
★ 회고
도대체 어떻게 시간 안에 나머지 프로세스의 우선순위를 1씩 증가시키라는 것인가!!를 한 시간 정도 생각했다. 생각하다가 내가 썼던 티스토리 글들을 보고 있었는데 우연히 이 글이 눈에 들어왔다.
https://cochin-man.tistory.com/28
백준_6198_옥상 정원 꾸미기(python)
※ 접근법 옥상의 개수가 최대 팔만 개였기 때문에 단순 이중 for 문을 돌면 시간 초과가 발생할 것이라고 생각을 했다. 높이를 정렬을 하면 안 됐기 때문에 느낌상 스택을 사용해야 할 것 같았다
cochin-man.tistory.com