DP 11

99클럽 코테 스터디 19일차 TIL + DP

https://www.acmicpc.net/problem/28069import sysinput = sys.stdin.readlinen, k = map(int, input().split())inf = 1e7dp = [inf] * (n+1)dp[0] = 0for i in range(n): if i i+1번째 계단에 올 수 있는 횟수는 두가지 방법으로 구할 수 있다.이전 칸에서 한칸 오르기 > 기존횟수 + 1i+i//2 칸 오르기 > 기존횟수 + 1즉 기존 자신의 횟수와 이전 칸 (i) 에서 올라오는 횟수를 비교해 최솟값을 가지고 있으면 된다.n개의 계단을 돌면서 횟수를 구해주고 k횟수 보다 적다면 k횟수 안에 계단에 도달한 것이기 때문에 minigimbob 출력k횟수 보다 많다면 k횟수 안에 도달하지..

Algorithm/Problems 2025.04.24

99클럽 코테 스터디 15일차 TIL + DP

https://www.acmicpc.net/problem/17271import sysinput = sys.stdin.readlinemod = 1000000007n, m = map(int, input().split())dp = [1] * (n+1)for i in range(m, n+1): dp[i] = (dp[i-1] + dp[i-m]) % modprint(dp[n])A스킬 시전시간은 1초, B스킬 시전시간은 m초 이기 때문에 n이 m보다 작을 때에는 무조건 A스킬만 사용할 수 있다.m초 이하일 때에는 A스킬만 사용하기 때문에 경우의 수는 1 이다. (dp[i] = dp[i-1] = 1)m초 이상일 때에는 A스킬과 B스킬을 함께 사용할 수 있다.t초 일 때t-1초까지 스킬 쓴 상태에서 A스킬 사용 가..

Algorithm/Problems 2025.04.18

99클럽 코테 스터디 12일차 TIL + DP

https://www.acmicpc.net/problem/2156# 2156 포도주 시식import sysinput = sys.stdin.readlinen = int(input())wine = [0]for _ in range(n): wine.append(int(input()))dp = [0] * (n+1)dp[1] = wine[1] # 1번째는 첫잔 마시는게 최대if n > 1: dp[2] = wine[1] + wine[2] # 2번째는 첫번째 잔 + 두번째 잔 마시는게 최대# i번째 와인을 마시고 i-2까지 마신 양# i번째를 마시지 않음 # i, i-1번째를 마시고 i-3번째 까지 마신 양 for i in range(3, n+1): dp[i] = max(dp[i-2] + wine[i]..

Algorithm/Problems 2025.04.15

99클럽 코테 스터디 31일차 TIL + DP

https://www.acmicpc.net/problem/2631import sysinput = sys.stdin.readlinen = int(input())lines = []for _ in range(n): lines.append(int(input()))dp = [1] * nfor i in range(n): for j in range(i): if lines[j] 결국 오름차순으로 정렬되기까지의 최소 이동 횟수를 정해야한다.가장 큰 증가하는 부분 수열을 구하면 그 사람은 올바르게 줄 서있는 것이기 때문에 그 나머지 값을 구하면 된다.

Algorithm/Problems 2024.11.28

99클럽 코테 스터디 30일차 TIL + DP

https://www.acmicpc.net/problem/1965import sysinput = sys.stdin.readlinen = int(input())box = list(map(int, input().split()))dp = [1] * nfor i in range(n): for j in range(i): if box[j] 가장 긴 감소하는 부분 수열, 가장 큰 증가하는 부분 수열과 비슷한 계열이다.처음 코드를 짰을 때, dp[i] = max(dp[i]+1, dp[j]) 로 적어 오답이었다.현재 자기자신과 이전 값에 자기자신이 포함되는 +1 이 되는 값 중 더 큰 값을 초기화 시키며 가장 큰 값을 구하면 된다.

Algorithm/Problems 2024.11.27

99클럽 코테 스터디 28일차 TIL + DP

https://www.acmicpc.net/problem/11055import sysinput = sys.stdin.readlinen = int(input())A = list(map(int, input().split()))dp = [0] * ndp[0] = A[0]for i in range(n): for j in range(i): if A[i] > A[j]: dp[i] = max(dp[i], dp[j]+A[i]) else: dp[i] = max(dp[i], A[i])print(max(dp))dp리스트를 0으로 초기화 한 후 dp[0]값은 이전 값과 비교할 것이 없기 때문에 A[0]으로 초기화 해준다.자신 앞까지의 값을 비교하며 이전까지..

Algorithm/Problems 2024.11.25