목록algorithm/HUFS 2022 하계 모각코 (12)
현제의 현재이야기
총 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..
import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline graph = [] for _ in range(5): arr = list(map(int, input().split())) graph.append(arr) result_set = set() def dfs(i, j, result): result += str(graph[i][j]) if len(result) == 6: result_set.add(result) return dx, dy = [1, 0, -1, 0], [0, -1, 0, 1] for d in range(4): x = i + dx[d] y = j + dy[d] if 0
n, m = tuple(map(int, input().split())) order = [ int(input()) for _ in range(n) ] dice = [ int(input()) for _ in range(m) ] pointer = 0 cnt = 0 for i in dice: cnt += 1 pointer += i if pointer >= n - 1: print(cnt) break pointer += order[pointer] if pointer >= n - 1: print(cnt) break 알고리즘 : 1. pointer를 만들고 주사위가 나오는 숫자를 더해주고, 한번 검사 (검사하지 않으면 두번째 테케에서 인덱스 오류남) 2. 그리고 포인터가 n - 1 보다 작으면 포인터에 현재 있는 칸의..