문제를 꼼꼼히 읽고 구현하려고 했다~
큐를 하나 만들어서 은행 대기 줄을 구현했다. 이미 줄 서있는 사람들은 이 큐에 넣고 시작했고, 나중에 오는 사람들은 시간이 될 때 큐 안에 넣었다.
1. 큐의 맨 앞에 있는 고객을 만나기
2. 고객 업무 처리하기
1) 고객에게 필요한 시간이 T보다 크거나 같으면 T초 동안 그 고객을 만났다. 시간을 1초씩 움직이면서, 그 고객 아이디를 출력했고, 만약에 그때 은행에 들어온 고객이 있는지 체크하고 있으면 큐 안에 넣어주었다.
=> 다 끝난 후에, 고객이 다시 뒤에 가서 서야 하면(필요한 시간이 T보다 컸으면) 큐의 맨 뒤에 넣었다.
2) 고객에게 필요한 시간이 그보다 작으면 필요한 시간만큼만 고객을 만나면 된다. 이때도 시간을 1초씩 움직이면서, 그 고객 아이디를 출력하고, 그때 은행에 들어온 고객이 있으면 큐 안에 넣었다.
* 2번을 진행하면서 시간을 1초씩 움직일 때, 매번 W초보다 작은지 체크했다.
3. 다시 1번으로 돌아가기
import collections
import sys
input = sys.stdin.readline
MIIS = lambda: map(int, input().split())
N, T, W = MIIS()
bank_line = collections.deque() # 은행 대기 줄
# 영업 시작할 때 대기 줄에 이미 있는 손님
for _ in range(N):
p, t = MIIS()
bank_line.append((p, t))
# 오픈 후에 오는 손님
M = int(input())
after_customers = list()
for _ in range(M):
p, t, c = MIIS()
after_customers.append((c, p, t))
after_customers.sort()
after_customers = collections.deque(after_customers)
now = 0
while bank_line and now < W:
# 맨 앞의 고객 만나기
curr_customer_p, curr_customer_t = bank_line.popleft()
if curr_customer_t >= T: # 고객이 필요한 시간이 T보다 크거나 같으면
i = 0
while i < T and now < W: # T 초 동안 그 고객을 만나기
print(curr_customer_p)
now += 1
i += 1
# 이 시각 이전에 은행에 들어온 고객이 있으면 줄 서게 하기
while after_customers and now == after_customers[0][0]:
tmp_c, tmp_p, tmp_t = after_customers.popleft()
bank_line.append((tmp_p, tmp_t))
if curr_customer_t > T: # 고객이 다시 뒤에 가서 서야 하면
bank_line.append((curr_customer_p, curr_customer_t - T)) # 다시 맨 뒤에 서세요.
elif curr_customer_t < T: # 고객이 필요한 시간이 T시간보다 작으면
i = 0
while i < curr_customer_t and now < W:
print(curr_customer_p) # 고객이 필요한 시간만큼 그 고객 만나기
now += 1
i += 1
# 이 시각 이전에 은행에 들어온 고객이 있으면 줄 서게 하기
while after_customers and now == after_customers[0][0]:
tmp_c, tmp_p, tmp_t = after_customers.popleft()
bank_line.append((tmp_p, tmp_t))
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 1149 : RGB 거리 (0) | 2021.10.27 |
---|---|
[백준-파이썬] 2170 : 선 긋기 (0) | 2021.10.27 |
[백준-파이썬] 20159: 동작 그만. 밑장 빼기냐. (0) | 2021.10.23 |
[백준-파이썬] 21776: 가희와 읽기 쓰기 놀이 (0) | 2021.10.20 |
[백준-파이썬] 17265: 나의 인생은 수학과 함께 (0) | 2021.10.19 |