목록algorithm (61)
현제의 현재이야기
11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 www.acmicpc.net import sys n = int(input()) miro = list(map(int, input().split())) dp = [1000 for _ in range(n)] dp[0] = 0 for i in range(n): for j in range(1, miro[i]+ 1): if i + j < n: dp[i + j] = min(dp[i] + 1, dp[i + j]) if dp[-1] == 1000: print(-1) else: print(dp[-1..
14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net n = int(input()) sch = [ tuple(map(int, input().split())) for _ in range(n) ] dp = [0] * 16 if sch[n - 1][0] == 1: dp[n - 1] = sch[n - 1][1] else: dp[n - 1] = 0 for i in range(n - 2, -1, -1): if i + sch[i][0]> n: dp[i] = dp[i + 1] else: dp[i] = max(dp[i + 1], sch[i][1] + dp[i + sch[i][0]]) print(dp[0]) 알고리즘: dp를 뒤에서부터 갱신해 주는 것이 포인트. dp를 ..
총 11개의 알고리즘 공부 기록 [백준/python] 연결 요소의 개수 (BFS) - 실패 [백준/python] 17451 - 평행우주 [백준/python] 11724 - 연결 요소 개수 [백준/python] 9372 - 상근이의 여행 [백준/python] 3048 - 개미 코드트리 - 그래프 탐색 [백준/python] 5566 - 주사위 게임 [백준/python] 2210 - 숫자판 점프 [백준/python] 2579- 계단오르기 [백준/python] 2156- 포도주 시식 [백준/python] 11048- 이동하기 진행 방식 매번 모각코 시간 때, 자유롭게 백준 1문제를 푸는 것을 목표로 한다. 그리고 서로 코드 리뷰할 것이 있거나, 질문 사항이 있다면 언제든지 공유해서 토론하는 시간을 가졌다. 그리..
n ,m = tuple(map(int, input().split())) miro = [ list(map(int, input().split())) for _ in range(n) ] dp = [ [0] * m for _ in range(n) ] for i in range(n): for j in range(m): if i == 0 and j == 0: dp[0][0] = miro[0][0] elif i == 0: dp[0][j] = dp[0][j - 1] + miro[0][j] elif j == 0: dp[i][0] = dp[i - 1][0] + miro[i][0] else: dp[i][j] = max(dp[i - 1][j] + miro[i][j], dp[i][j - 1] + miro[i][j], dp[i ..
n = int(input()) wine = [int(input()) for _ in range(n)] dp = [0] * n dp[0] = wine[0] if n > 1: dp[1] = wine[0] + wine[1] if n > 2: dp[2] = max(wine[1] + wine[2], wine[0] + wine[2], wine[0] + wine[1]) if n > 3: for i in range(3, n): dp[i] = max(wine[i] + wine[i - 1] + dp[i - 3], wine[i] + dp[i - 2], dp[i - 1]) print(dp[n - 1]) 알고리즘: 계단 오르기랑 똑같은데 차이점은 맨 끝칸을 안 가도 된다는 것이다. 그래서 dp[2] 의 max에 wine[0] ..
n = int(input()) stair = [int(input()) for _ in range(n)] dp = [0] * n dp[0] = stair[0] if n > 1: dp[1] = stair[0] + stair[1] if n > 2: dp[2] = max(stair[1] + stair[2], stair[0] + stair[2]) if n > 3: for i in range(3, n): dp[i] = max(dp[i - 3] + stair[i - 1] + stair[i], dp[i - 2] + stair[i]) print(dp[n-1]) 알고리즘: 1. Stair 배열을 받고, DP배열도 n개로 만듦 2. dp[1]은 2번째 칸이므로 그냥 1번쨰 2번째 두개 더한 것이 최대 3. dp[2] 는 2..