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 |