코딩테스트

[구름] 체크 카드 (python)

hammii 2024. 11. 10. 23:41

문제

https://level.goorm.io/exam/160275/%EC%B2%B4%ED%81%AC-%EC%B9%B4%EB%93%9C/quiz/1

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

 

코드

from collections import deque

N, M  = map(int, input().split())
queue = deque()

for _ in range(M):
	line = input().split()
	t = line[0]
	price = int(line[1])
	
	if t == 'deposit':
		N += price
		
		while queue and N >= queue[0]:
			N -= queue.popleft()
			
	elif t == 'pay':
		if N >= price:
			N -= price
	elif t == 'reservation':
		if N >= price:
			if queue:
				queue.append(price)
			else:
				N -= price
		else:
			queue.append(price)
	
print(N)

deposit인 경우에 금액만큼 계좌에 price를 더해주고

pay인 경우에 금액만큼 계좌에서 price를 차감했다.

reservation인 경우에, 계좌의 현재 잔액(N)과 price를 비교하여 더 적은 경우 대기 목록(queue)에 추가하였다.

 

결제가 가능해지는 즉시 해당 거래의 금액만큼 계좌에서 금액이 차감된 뒤 대기 목록에서 삭제 되어야 하기 때문에

deposit 인 경우에 while 문을 사용하여 결제가 가능한 경우 대기목록(queue)에서 삭제해주었다.