[코테 준비 : day14]

Choi·2023년 7월 12일
0

코딩테스트 준비

목록 보기
14/22

영-영-차! 좋아쒀!


영-차! 했더니 실버1!
영-영-차해서 골드까지 달립니다.

요즘 공부하고있는 문제들은 누군가 정리한 커리큘럼을 따라서 하는 중이다.
매우 괜찮은 문제들이라서 링크를 아래 걸어놓겠다!
https://dev-dain.tistory.com/155

  1. 제로
    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))
  1. 에디터
    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))))

  1. 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())
            
  1. 큐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())
            
  1. 요세푸스 문제0
    https://www.acmicpc.net/problem/11866
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(">")
profile
느려도 내 것으로 만드는게 좋잖아?

0개의 댓글