-
[17070] 파이프 옮기기 1BOJ 2022. 1. 2. 03:35
https://www.acmicpc.net/problem/17070
17070번: 파이프 옮기기 1
유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의
www.acmicpc.net
<문제>
하나의 상태는 파이프의 한쪽 끝 좌표 (y, x)와 방향으로 구성할 수 있다.
이를 bfs나 dp로 계산하면 되는데, 회전은 45도로만 가능하다는 부분에 유의할 필요가 있다.
<소스코드>
12345678910111213141516171819202122232425262728#include <bits/stdc++.h>using namespace std;int n, a[20][20], dp[20][20][3];int main(void) {int i, j;cin >> n;for (i = 1; i <= n; i++) {for (j = 1; j <= n; j++) {cin >> a[i][j];}}dp[1][2][0] = 1;for (i = 1; i <= n; i++) {for (j = 1; j <= n; j++) {if (i == 1 && j == 1 || i == 1 && j == 2) continue;if (a[i][j] == 1) continue;dp[i][j][0] += dp[i][j - 1][0] + dp[i][j - 1][2];dp[i][j][1] += dp[i - 1][j][1] + dp[i - 1][j][2];if (a[i + 1][j - 1] == 0 && a[i + 1][j] == 0) {dp[i + 1][j][2] += dp[i][j - 1][0];dp[i + 1][j][2] += dp[i][j - 1][2];dp[i + 1][j][2] += dp[i][j - 1][1];}}}cout << dp[n][n][0] + dp[n][n][1] + dp[n][n][2];return 0;}cs 'BOJ' 카테고리의 다른 글
[8892] 팰린드롬 (0) 2022.01.02 [5014] 스타트링크 (0) 2022.01.02 [1574] 룩 어택 (0) 2022.01.01 [18138] 리유나는 세일러복을 좋아해 (0) 2021.12.31 [1071] 소트 (0) 2021.12.31