728x90
반응형

단순 구현 문제이다.

N = int(input())
print('*'*N + ' '*(2*N-3) + '*'*N)
for i in range(N-2):
    print(' '*(i+1) + '*' + ' '*(N-2) + '*' + ' '*((N-2-i)*2- 1) + '*' + ' '*(N-2) + '*')
print(' '*(N-1) + '*' + ' '*(N-2) + '*' + ' '*(N-2) + '*')
for i in range(N-3, -1, -1):
    print(' '*(i+1) + '*' + ' '*(N-2) + '*' + ' '*((N-2-i)*2- 1) + '*' + ' '*(N-2) + '*')
print('*'*N + ' '*(2*N-3) + '*'*N)
728x90
반응형
728x90
반응형

단순 구현 문제이다.

N = int(input())
for i in range(N):
    print("* "*N if i%2 == 0 else " *"*N)
728x90
반응형
728x90
반응형

문제에 설명이 없는데 찾아보니 그냥 N*N 정사각형을 출력하면 되는 것 같다. 병맛;;

N = int(input())
for _ in range(N):
    print('*'*N)
728x90
반응형
728x90
반응형

수학 문제이다. 답은 생각보다 간단하다. M에서 N과 M의 최대공약수를 빼주면 된다.

def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a%b)
    
N, M = map(int, input().split())
print(M - gcd(max(N,M), min(N, M)))
728x90
반응형
728x90
반응형

의외로 이분 탐색으로 풀 수 있는 문제이다. 내일 다시 한 번 풀어봐야겠다.

N, K = int(input()), int(input())
s, e = 1, K
ans = 0
while s <= e:
    m = (s+e)//2
    t = 0
    for i in range(1, N+1):
        t += min(N, m//i)
    if t >= K:
        ans = m
        e = m - 1
    else:
        s = m + 1
print(ans)

 

728x90
반응형
728x90
반응형

덱 문제이다. 생각보다 쉽지 않은 문제였다. 런타임 에러에 주의해줘야 하고 시간도 빡빡하기 때문이다.

핵심은 R이 들어올 때마다 reverse 하면 안 된다는 점이다. 이것 때문에 계속 시간 초과가 나왔었다.

R이 홀수개만큼 들어온 상황 -> D 들어올 시 pop

R이 짝수개만큼 들어온 상황 -> D 들어올 시 popleft

마지막에 R이 홀수개라면 reverse 하고 출력, 짝수 개면 그냥 출력해주면 된다. 

from collections import deque
import sys

for _ in range(int(sys.stdin.readline().rstrip())):
    p = sys.stdin.readline().rstrip()
    n = int(sys.stdin.readline().rstrip())
    t = sys.stdin.readline().rstrip()[1:-1]
    if not t:
        queue = deque()
    else:
        queue = deque(map(int, t.split(',')))
    ok = 1
    is_rev = False
    for c in p:
        if c == 'R':
            is_rev = not is_rev
        elif queue and c == 'D':
            if is_rev:
                queue.pop()
            else:
                queue.popleft()
        else:
            ok = 0
            break
    if is_rev:
        queue.reverse()
    if ok:
        print('[', end='')
        print(*queue, sep=',', end='')
        print(']')
    else:
        print("error")
728x90
반응형
728x90
반응형

스택 문제이다. 처음에 스택에 인덱스 말고 수열의 원소를 넣는 방식으로 생각해서 못 풀었다.

결국 해답을 봤는데 한 끗 차이였다ㅠ 내일 다시 풀어봐야겠다.

from collections import deque

N = int(input())
nums = list(map(int, input().split()))
stack = deque()
res = [-1]*N
for i in range(N):
    while stack and nums[stack[-1]] < nums[i]:
        res[stack.pop()] = nums[i]
    stack.append(i)
print(*res)
728x90
반응형
728x90
반응형

구현 & 스택 문제이다. 문제가 상당히 깜찍하다.

from collections import deque

_ = input()
stack = deque()
while 1:
    s = input()
    if s == "고무오리 디버깅 끝":
        break
    if s == "문제":
        stack.append(1)
    elif stack and s == "고무오리":
        stack.pop()
    else:
        stack.append(1); stack.append(1)
print("고무오리야 사랑해" if not stack else "힝구")
728x90
반응형
728x90
반응형

구현 & 스택 문제이다. 스택이 비어있을 때를 주의해서 잘 처리해줘야 한다. 런타임 에러로 엄청 틀렸다ㅜ

import sys
from collections import deque

stack = deque()
score = 0
for _ in range(int(sys.stdin.readline())):
    li = list(map(int, sys.stdin.readline().split()))
    if stack == [] or li[0] == 1:
        stack.append(li[1:])
    if stack:
        stack[-1][1] -= 1
        if stack[-1][1] == 0:
            score += stack.pop()[0]
print(score)
728x90
반응형
728x90
반응형

기본적인 스택 문제이다.

from collections import deque

for case in range(int(input())):
    stack = deque(input().split())
    print(f"Case #{case+1}: ", end='')
    while len(stack) > 1:
        print(stack.pop(), end= ' ')
    print(stack.pop())
728x90
반응형
728x90
반응형

구현 & 덱 문제이다. 요세푸스 문제에서 조금 진화한 버전인 것 같은데,

오른쪽으로 돌 때는 K-1번, 왼쪽으로 돌 때는 K번 돈다는 점만 이해하면 쉽게 풀 수 있다.

PyPy3로 제출해야 시간 초과가 안 나온다.

from collections import deque

N, K, M = map(int, input().split())
queue = deque(range(1, N+1))
i = 0
while queue:
    if i//M % 2 == 0:
        for _ in range(K-1):
            queue.append(queue.popleft())
    else:
        for _ in range(K):
            queue.appendleft(queue.pop())
    i += 1
    print(queue.popleft())
728x90
반응형
728x90
반응형

기본적인 덱 문제이다. 카드 방향 때문에 되게 헷갈리는 문제이다. 난이도에 비해 푸는데 시간이 오래 걸린 것 같다.

from collections import deque

N = int(input())
li = deque(map(int, input().split()))
after = deque(range(1, N+1))
before = deque()
while li:
    t = li.pop()
    a = after.popleft()
    if t == 1:
        before.appendleft(a)
    elif t == 2:
        before.insert(1, a)
    elif t == 3:
        before.append(a)
print(*before)
728x90
반응형
728x90
반응형

그리디 알고리즘 & 덱 문제이다.

덱의 맨 처음 값보다 t가 크다면 덱의 맨 뒤에 t를 추가, 그렇지 않다면 덱의 맨 앞에 t를 추가해주면 된다. 

from collections import deque

for _ in range(int(input())):
    N = int(input())
    li = deque(input().split())
    queue = deque(li.popleft())
    while li:
        t = li.popleft()
        if t > queue[0]:
            queue.append(t)
        else:
            queue.appendleft(t)
    print(''.join(queue))
728x90
반응형
728x90
반응형

기본적인 덱 문제이다. 조금 더 쉽게 풀 수도 있을 것 같은 문제인데 연습 삼아 그냥 이런 식으로 풀어봤다.

from collections import deque

N = int(input())
li = [[n, i+1] for i, n in enumerate(map(int, input().split()))]
queue = deque(li)
while queue:
    t = queue.popleft()
    print(t[1], end=' ')
    if queue and t[0] > 0:
        for _ in range(t[0]-1):
            queue.append(queue.popleft())
    elif queue and t[0] < 0:
        for _ in range(-t[0]):
            queue.appendleft(queue.pop())
print()
728x90
반응형
728x90
반응형

기본적인 덱 문제이다. 2164 카드2와 거의 동일한 문제이다.

from collections import deque

N = int(input())
queue = deque([i for i in range(1, N+1)])
while len(queue) > 1:
    print(queue.popleft(), end=' ')
    queue.append(queue.popleft())
print(*queue)
728x90
반응형

+ Recent posts