분류 전체보기 206

파이썬 백준 2164 카드2

x = int(input()) def f(n) : if n == 1 : return 1 else : p = 1 while n > p : p = p * 2 n = n - p//2 return n*2 print(f(x)) 카드가 2^n개라면 마지막에 남는 카드는 맨 밑의 카드이다. 즉, 카드 매수를 2^n +a로 표현했을 때, 한장 버리고 한장 넘기는 것을 a번 반복해서 2^n장이 남았을 때 마지막에 남는 카드는 방금 밑으로 넣어서 맨 밑에 있는 2a이다. 입력받은 매수보다 작으면서 가장 큰 2의 제곱수를 n에서 빼준 것의 2배를 출력하면 정답

파이썬 백준 2812 크게 만들기

import sys input = sys.stdin.readline n, k = map(int, input().split()) l = input() stack = [int(l[0]),] count = 0 for i in range(1, n) : while stack != [] and count < k : if stack[-1] < int(l[i]) : del stack[-1] count = count + 1 else : break stack.append(int(l[i])) for i in range(n - k) : print(stack[i], end = '') 뒷자리 숫자가 앞자리보다 크면 앞자리를 지우고 뒷자리가 그 자리를 차지한다. 같은 숫자가 여럿 나오다가 지워야 할땐 count가 허용하는 선에서 ..

파이썬 백준 6549 히스토그램에서 가장 큰 직사각형

import sys input = sys.stdin.readline l = '' while l != [0] : l = list(map(int, input().split())) if l != [0] : n = l[0] l[0] = 0 l.append(0) stack = [[0, 0]] maxarea = 0 for i in range(1, n+2) : h = l[i] while stack[-1][1] > h : sh = stack[-1][1] del stack[-1] while stack[-1][1] == sh : del stack[-1] area = (i - stack[-1][0] - 1) * sh maxarea = max(maxarea, area) stack.append([i, h]) print(maxa..

파이썬 백준 2493 탑

n = int(input()) l = list(map(int, input().split())) stack = [[0, l[0]]] table = [0] for i in range(1, n) : h = l[i] while stack[-1][1] < h : del stack[-1] if stack == [] : table.append(0) break if stack != [] : table.append(stack[-1][0] + 1) stack.append([i, h]) for i in range(len(table) - 1) : print(table[i], end = ' ') print(table[-1]) 0번째 탑의 컨디션을 수동으로 stack과 table에 넣어준다. i번째 기둥보다 낮은 원소들이 sta..

파이썬 백준 9012 괄호

n = int(input()) for j in range(n) : l = input() st = 0 for i in range(len(l)) : if l[i] == '(' : st = st + 1 elif l[i] == ')' : st = st - 1 if st 0 : print('NO') 괄호의 종류가 하나이기 때문에 리스트 형태의 스택을 만들지 않고 그냥 정수로 세도 된다. 마지막에 스택이 0이라면 정상적인 괄호열이고, 중간에 음수가 되거나 마지막에 0이 아니라면 틀린 괄호열이다.