영-차! 했더니 실버1!
영-영-차해서 골드까지 달립니다.
요즘 공부하고있는 문제들은 누군가 정리한 커리큘럼을 따라서 하는 중이다.
매우 괜찮은 문제들이라서 링크를 아래 걸어놓겠다!
https://dev-dain.tistory.com/155
- 제로
https://www.acmicpc.net/problem/10773
0이 나올 때 pop만 해주면 끝
n=int(input())
num=[]
for i in range(n):
k=int(input())
if k!=0:
num.append(k)
elif k==0:
num.pop()
print(sum(num))
- 에디터
https://www.acmicpc.net/problem/1406
알고리즘은 짤 수 있었지만 시간초과 문제로 머리가 아팠다. input() 대신 sys로 입력 받고 스택을 두 개 사용해서 해결:)
import sys
stack_l = list(input())
stack_r = []
n = int(input())
for i in range(n):
command = sys.stdin.readline().split()
if command[0] == "L" and stack_l:
stack_r.append(stack_l.pop())
elif command[0] == "D" and stack_r:
stack_l.append(stack_r.pop())
elif command[0] == "B" and stack_l:
stack_l.pop()
elif command[0] == "P":
stack_l.append(command[1])
print("".join(stack_l + list(reversed(stack_r))))
- 큐
https://www.acmicpc.net/problem/10845
각 command별로 수행만 잘하면 끝!
import sys
que=[]
for i in range(int(sys.stdin.readline())):
command=sys.stdin.readline().split()
if command[0]=='push':
que.insert(0,command[1])
elif command[0]=='front':
if len(que)==0:
print(-1)
else:
print(que[-1])
elif command[0]=='back':
if len(que)==0:
print(-1)
else:
print(que[0])
elif command[0]=='size':
print(len(que))
elif command[0]=='empty':
if len(que)==0:
print(1)
else:
print(0)
elif command[0]=='pop':
if len(que)==0:
print(-1)
else:
print(que.pop())
- 큐2
https://www.acmicpc.net/problem/18258
위 문제와 반복 범위가 달랐기에 더 빠른 연산을 구현해야했다. 알고리즘은 같지만 deque 사용!
import sys
from collections import deque
que = deque([])
for i in range(int(sys.stdin.readline())):
command=sys.stdin.readline().split()
if command[0]=='push':
que.insert(0,command[1])
elif command[0]=='front':
if len(que)==0:
print(-1)
else:
print(que[-1])
elif command[0]=='back':
if len(que)==0:
print(-1)
else:
print(que[0])
elif command[0]=='size':
print(len(que))
elif command[0]=='empty':
if len(que)==0:
print(1)
else:
print(0)
elif command[0]=='pop':
if len(que)==0:
print(-1)
else:
print(que.pop())
import sys
from collections import deque
queue = deque()
result = []
n, k = map(int, sys.stdin.readline().split());
for i in range(1, n+1):
queue.append(i)
while queue:
for i in range(k-1):
queue.append(queue.popleft())
result.append(queue.popleft())
print("<", end='')
print(', '.join(map(str,result)), end='')
print(">")