[코테 준비 : day16]

Choi·2023년 7월 14일
0

코딩테스트 준비

목록 보기
16/22

가보자구...

  1. 회전하는 큐
    https://www.acmicpc.net/problem/1021
from collections import deque

n,m = map(int,input().split())
# deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 이런식으로 큐를 표현한다.
data = deque([i for i in range(1,n+1)])
#뽑아내려고 하는 수의 위치가 index변수에 순서대로 담아있다.
index = list(map(int,input().split()))

count = 0
for num in index:
    while 1:
        if data[0] == num:
            data.popleft()
            break
        else:
            if data.index(num) <= len(data)//2:
                data.rotate(-1)
                count += 1
            else:
                data.rotate(1)
                count += 1

print(count)
  1. 크게 만들기
    https://www.acmicpc.net/problem/2812
N, K = map(int, input().split())
num = list(input())
k, stack = K, []

for i in range(N):
    while k > 0 and stack and stack[-1] < num[i]:
        stack.pop()
        k -= 1
    stack.append(num[i])

print(''.join(stack[:N-K]))
  1. 프린터 큐
    https://www.acmicpc.net/problem/1966
from collections import deque

num = int(input())
for i in range(num):
    cnt = 0
    N, M = map(int,input().split())
    imp = deque(list(map(int,input().split())))
    
    while len(imp) > 0:
        maxi = max(imp)
        if imp[0] == maxi:  # 처음 원소값이 최댓값이면
            imp.popleft()
            if M == 0:  # pop된 수가 목표 수이면
                cnt += 1
                break
            else:
                cnt += 1
                M -= 1  # 한칸씩 당겨짐
        else:
            a = imp.popleft()
            imp.append(a)
            if M == 0:
                M += len(imp) - 1  # 목표 수가 최대값이 아니면 맨 뒤로 넣어줌
            else:
                M -= 1 
    print(cnt)
  1. 오큰수
    https://www.acmicpc.net/problem/17298
import sys
n = int(input())
A = list(map(int, sys.stdin.readline().split()))
answer = [-1] * n
stack = []


stack.append(0)
for i in range(1, n):
    while stack and A[stack[-1]] < A[i]:
        answer[stack.pop()] = A[i]
    stack.append(i)


print(*answer)
  1. 나무조각
    https://www.acmicpc.net/problem/2947
a = list(map(int, input().split()))
answer = [1, 2, 3, 4, 5]

while True:
    for i in range(len(a)-1):
        if a[i] > a[i+1]:
            a[i], a[i+1] = a[i+1], a[i]
            print(" ".join(map(str, a)))

    if a == answer:
        break
profile
느려도 내 것으로 만드는게 좋잖아?

0개의 댓글