import sys
from collections import deque
input = sys.stdin.readline
N,T = map(int,input().split())
order_list = list(map(int,input().split()))
stack_list = [[[],set()] for _ in range(N+1)]
card_deck = deque()
result = []
for _ in range(T):
input_list = list(input().split())
card_deck.append(input_list)
num_occupy_set = set()
for ind in order_list:
if len(stack_list[ind][0]) > 0:
cu_card = stack_list[ind][0][0]
result.append(cu_card[0])
if cu_card[2] in num_occupy_set:
continue
else:
stack_list[ind][0].pop(0)
stack_list[ind][1].add(cu_card[2])
num_occupy_set.add(cu_card[2])
else:
cu_card = card_deck.popleft()
result.append(cu_card[0])
if cu_card[1] == 'next':
continue
elif cu_card[1] == 'acquire':
if cu_card[2] in num_occupy_set:
stack_list[ind][0].append(cu_card)
else:
stack_list[ind][1].add(cu_card[2])
num_occupy_set.add(cu_card[2])
else:
stack_list[ind][1].remove(cu_card[2])
num_occupy_set.remove(cu_card[2])
for i in range(T):
sys.stdout.write(result[i]+"\n")
문제에 주어진대로 사람 수대로, deck을 만들어준뒤, 순서대로 명령어를 실행해주면 되는 구현 문제였다.
만약에 acquire 카드를 썼지만, 카드더미에 없으면, 자기 덱에 카드를 넣어주고, 그 카드를 다시 실행해주는 구현부분만 제대로 해주면 된다.
이 코드는 깔끔하지 못해서 대회가 끝나고 난뒤에 고친 코드는 밑에 있다.
import sys
from collections import deque
input = sys.stdin.readline
N,T = map(int,input().split())
turns = list(map(int,input().split()))
card_deck = deque()
for _ in range(T):
temp = input().rstrip().split(' ')
card_deck.append(temp)
occupy_card = [[] for _ in range(N+2)]
result = []
used_card_num = set()
for i in range(T):
person = turns[i]
if len(occupy_card[person])>0:
card_num,wanted_num = occupy_card[person]
result.append(card_num)
if wanted_num in used_card_num:
continue
else:
used_card_num.add(wanted_num)
occupy_card[person] = []
else:
card_num,*rests= card_deck.popleft()
result.append(card_num)
if rests[0] == 'next':
continue
elif rests[0] == 'acquire':
if rests[1] in used_card_num:
occupy_card[person] = (card_num,rests[1])
else:
used_card_num.add(rests[1])
elif rests[0] == 'release':
used_card_num.remove(rests[1])
for i in range(T):
sys.stdout.write(result[i]+'\n')
어차피 보유하고 있을수 있는 카드는 한장이므로, set을 굳이 넣을 필요가 없고, used_card를 통해, 쓴 카드와 안쓴 카드를 구분을 해줬다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 21777 리버스 가희와 프로세스 (0) | 2021.06.05 |
---|---|
[BOJ/백준] 21776 가희의 읽기 쓰기 놀이 (0) | 2021.06.05 |
[BOJ/백준] 21774 가희와 로그 파일 (0) | 2021.06.01 |
[BOJ/백준] 21773 가희와 프로세스 1 (0) | 2021.05.27 |
[BOJ/백준] 21772 가희와 고구마 먹방 (0) | 2021.05.27 |