목록문제/백준_파이썬 (155)
sm 기술 블로그
import sys input = sys.stdin.readline N = int(input()) num = list(map(int,input().split())) numReverse = num[::-1] numDpIncrease = [1]*N numDpDecrease = [1]*N for i in range(N): for j in range(i): if num[i] > num[j]: numDpIncrease[i] = max(numDpIncrease[i], numDpIncrease[j]+1) if numReverse[i] > numReverse[j]: numDpDecrease[i] = max(numDpDecrease[i],numDpDecrease[j]+1) result = [0]*N for i in ra..
import sys input = sys.stdin.readline N = int(input()) arr = list(map(int,input().split())) arrDp = [1 for i in range(N)] for i in range(N): for j in range(i): if arr[i] > arr[j]: arrDp[i] = max(arrDp[i], arrDp[j]+1) print(max(arrDp)) 문제요약 증가하는 수열이 가장 긴 부분은? 설명 코드는 크게 어렵지 않을 것이다. 7 1 4 5 2 3 4 5 로 보자. 값을 하나하나 다 비교해서 수열이 가장 긴 부분에 대해서 가져가면 된다. 먼저 각 인덱스는 1의 수열을 가질 수 있어 1로 초기화 해주었다. for i in range(N..
import sys input = sys.stdin.readline N = int(input()) wine=[int(input()) for _ in range(N)] wineDp = [0]*(N) try: wineDp[0] = wine[0] wineDp[1] = max(wine[0] + wine[1], wine[1]) wineDp[2] = max(wine[0] + wine[1], wine[0] + wine[2], wine[1] + wine[2]) for i in range(3, N): wineDp[i] = max(wineDp[i-1],wineDp[i-3] + wine[i-1] + wine[i], wineDp[i-2] + wine[i]) print(max(wineDp)) except: sum = 0 for..
N = int(input()) dp = [-1] * (10**6+1) dp[1] = 0 dp[2] = 1 dp[3] = 1 if N > 3: for i in range(4, N+1): #-1씩 해도 최대 N번임 dp[i] = dp[i-1]+1 if i % 3 == 0: dp[i] = min(dp[i], dp[i//3]+1) if i % 2 == 0: dp[i] = min(dp[i], dp[i//2]+1) print(dp[N]) 문제요약 조건 1: 3으로 나눠지면 3으로 나눈다 조건 2: 2로 나눠지면 2로 나눈다 조건 3: 1을 뺀다. 세가지 조건을 가장 적게 사용해서 1로 만들어라. 설명 먼저 3까지는 기본값으로 초기화 해준다. 입력값이 6인 경우까지 설명 하겠다. 1. 4인경우 1) 1을 뺏을 경우 ..