[ BOJ / Python ] 12764번 싸지방에 간 준하

황승환·2022년 5월 30일
0

Python

목록 보기
315/498


이번 문제는 우선순위 큐를 이용하여 해결하였다. 그리디한 방식으로 접근해보면, 우선 먼저 사용하는 순서대로 정렬된 상태에서 비어있는 pc를 이용하면 된다. 그래서 pc와 사용자 수에 해당하는 리스트 두개를 n만큼의 길이의 0으로 된 리스트로 선언하고, pc리스트에는 사용자의 종료 시간일 갱신시키고, cnt리스트에는 사용자 수를 갱신시켰다. 정렬된 상태를 유지시키기 위해 heapq 모듈을 이용하여 최소힙을 만들어 입력값을 관리하였다. hq가 존재하는 동안 반복하는 while문에서 pc리스트를 순회하며 만약 pc리스트가 hq를 pop한 값의 첫번째 인자보다 작거나 같을 경우에는 그 pc를 사용할 수 있는 경우이므로, pc의 값을 두번째 인자로 갱신해주고, cnt리스트를 1 증가시킨다. 그리고 실행 시간을 위해 반드시 break를 해준다. 이 방법을 통해 쉽게 정답을 구할 수 있었다.

Code

import heapq
n=int(input())
hq=[]
for _ in range(n):
    s, e=map(int, input().split())
    heapq.heappush(hq, (s, e))
pc=[0 for _ in range(n)]
cnt=[0 for _ in range(n)]
while hq:
    l, r=heapq.heappop(hq)
    for i in range(len(pc)):
        if pc[i]<=l:
            pc[i]=r
            cnt[i]+=1
            break
answer=[]
for i in range(len(pc)):
    if cnt[i]==0:
        continue
    answer.append(cnt[i])
print(len(answer))
print(*answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글