목록백준 문제 풀이 (154)
황소개발자
n이 되기위해선 뭐가 필요한지 생각하라 dp[n] 은 j 개 카드팩을 사고 d[n - j] 를 더하면 된다 그 중 max 값이 dp[n] 에 들어간다. import sys input = sys.stdin.readline n = int(input()) lst = list(map(int, input().split())) lst = [0] + lst dp = [0 for i in range(1001)] for i in range(n + 1): for j in range(i + 1): dp[i] = max(dp[i], lst[j] + dp[i - j]) print(dp[n])
그가 있지 않았다면 자신감을 얻지 못했을 것이다. import sys input = sys.stdin.readline dp = [0 for i in range(1000001)] dp[0] = 1 dp[1] = 1 dp[2] = 2 for i in range(3, 1000001): dp[i] = dp[i - 1] % 1000000009 + dp[i - 2] % 1000000009 + dp[i - 3] % 1000000009 t = int(input()) for i in range(t): n = int(input()) print(dp[n] % 1000000009)
뭐야 짬밥먹고 푸니 간단하네 import sys input = sys.stdin.readline def go(x, n): global count if x == n: count += 1 if x > n: return go(x + 1, n) go(x + 2, n) go(x + 3, n) t = int(input()) for i in range(t): n = int(input()) count = 0 go(0, n) print(count) 이게 최선의 풀이는 아닙니다. 아래 글이 최적의 코드입니다. 백준 15988 파이썬 python : 1, 2, 3 더하기 3 @@황소처럼 우직하게@@ 갓바텀업 그가 있지 않았다면 자신감을 얻지 못했을 것이다. import sys input = sys.stdin.readline..
간단하게 깔끔하게 n = int(input()) dp = [0 for i in range(1001)] dp[1] = 1 dp[2] = 3 for i in range(3, n + 1): dp[i] = dp[i - 1] % 10007 + 2 * dp[i - 2] % 10007 print(dp[n] % 10007)
다이나믹을 푸는데에는 top down 방식과 bottom up 방식이 있다. 편한걸 고르고 풀어라 n = int(input()) dp = [0 for i in range(1001)] dp[1] = 1 dp[2] = 2 for i in range(3, n + 1): dp[i] = (dp[i - 1] + dp[i - 2]) % 10007 print(dp[n] % 10007)
다이나믹부터 푸는가? bfs 부터 풀고 다이나믹을 풀어라 당장. from collections import deque n = int(input()) dp = [-1 for i in range(1000001)] def bfs(v): global dp q = deque() q.append(v) dp[v] = 0 while q: now = q.popleft() if now == 1: return if now % 3 == 0 and dp[now // 3] == -1: dp[now // 3] = dp[now] + 1 q.append(now // 3) if now % 2 == 0 and dp[now // 2] == -1: dp[now // 2] = dp[now] + 1 q.append(now // 2) if now..
제가 처음에 짠 코드에서 놓친 반례는 9 7 D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . S 이런 단순한 반례였습니다. 수정하고 시간초과가 났었는데 콜렉션의 디큐를 사용해줬죠. 또 수정하고 메모리초과가 났었는데 이차원 배열을 두개 사용했었죠. 그래서 이중 배열 하나로 합쳤습니다. 큐에 일단 별들 위치 넣어주고, 마지막에 S위치 넣어줍니다. 그리고 그냥 bfs 돌리면 됩니다. 그러면 알아서 물 움직이고, 비버가 움직이는 시뮬레이션이 완성됩니다. 저의 정답 코드는 다음과 같습니다. 음수는 물이 도달하는 시간 * -1 값이고요, (이 ..
빨리 성장하자 import sys input = sys.stdin.readline h, w = map(int, input().split()) miro = [[] for i in range(h)] dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] for i in range(h): ss = input().strip() for s in ss: miro[i].append(int(s)) dist = [[[0, 0] for j in range(w)] for i in range(h)] def bfs(y, x, wall): q = [[y, x, wall]] dist[y][x][wall] = 1 while q: now = q.pop(0) for i in range(4): y, x, z = now ny ..