ps:problems:boj:17069
파이프 옮기기 2
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 17069 |
문제명 | 파이프 옮기기 2 |
레벨 | 골드 5 |
분류 |
DP |
시간복잡도 | O(n^2) |
인풋사이즈 | n<=32 |
사용한 언어 | Python |
제출기록 | 29200KB / 80ms |
최고기록 | 56ms |
해결날짜 | 2021/10/17 |
풀이
코드
"""Solution code for "BOJ 17069. 파이프 옮기기 2".
- Problem link: https://www.acmicpc.net/problem/17069
- Solution link: http://www.teferi.net/ps/problems/boj/17069
Tags: [DP]
"""
WALL = '1'
def main():
N = int(input())
grid = [input().split() for _ in range(N)]
dp_hor_cur, dp_ver_cur, dp_diag_cur = [0] * N, [0] * N, [0] * N
dp_hor_cur[1] = 1
for c in range(2, N):
dp_hor_cur[c] = 0 if grid[0][c] == WALL else dp_hor_cur[c - 1]
for r in range(1, N):
dp_hor_prev, dp_hor_cur = dp_hor_cur, [0] * N
dp_ver_prev, dp_ver_cur = dp_ver_cur, [0] * N
dp_diag_prev, dp_diag_cur = dp_diag_cur, [0] * N
for c in range(1, N):
if grid[r][c] == WALL:
continue
dp_hor_cur[c] = dp_hor_cur[c - 1] + dp_diag_cur[c - 1]
dp_ver_cur[c] = dp_ver_prev[c] + dp_diag_prev[c]
if WALL not in (grid[r - 1][c], grid[r][c - 1]):
dp_diag_cur[c] = (dp_hor_prev[c - 1] + dp_ver_prev[c - 1] +
dp_diag_prev[c - 1])
print(dp_hor_cur[-1] + dp_ver_cur[-1] + dp_diag_cur[-1])
if __name__ == '__main__':
main()
ps/problems/boj/17069.txt · 마지막으로 수정됨: 2021/10/17 13:11 저자 teferi
토론