Week 01 ~ 04 : 알고리즘 문제 풀이 104

파이썬 백준 5904 Moo 게임

m = int(input()) k = 0 leng = 3 while leng < m : k = k + 1 leng = 2 * leng + 3 + k def DAC(x, l, n) : if x == 0 : if n == 1 : return 'm' else : return 'o' l = (l - 3 - x) // 2 x = x - 1 if n l + x + 4 : return DAC(x, l, n - l - x - 4) else : return 'o' print(DAC(k, leng, m)) n의 range가 10억이므로 순열을 직접 만들어서는 메모리 초과가 나올 것이다. 순열을 직접 만들지 않고 길이와 구성만 다루는 접근이 필요하다. S(k)는 세 부분으로 나눌 수 있다. 왼쪽 S(k-1), 가운데 moo..

파이썬 백준 12846 무서운 아르바이트

n = int(input()) l = list(map(int, input().split())) l.append(0) l.append(0) for i in range(n) : l[n-i] = l[n-i-1] l[0] = 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(maxarea) x축이 날짜, y축이 임..

파이썬 백준 14003 가장 긴 증가하는 부분 수열 5

from bisect import bisect_left n = int(input()) l = list(map(int,input().split())) order = [0 for i in range(n)] order[0] = 1 table = [l[0]] for i in range(1, n) : if table[-1] < l[i] : table.append(l[i]) order[i] = len(table) else : order[i] = bisect_left(table, l[i]) + 1 table[order[i] - 1] = l[i] m = max(order) print(m) lis = [] for i in range(n) : if order[n-1-i] == m : lis.append(l[n-1-i]) ..