본문 바로가기
백준 알고리즘/구현

파이프 옮기기 C++

by paysmile 2021. 10. 14.

https://www.acmicpc.net/problem/17069

 

17069번: 파이프 옮기기 2

유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의

www.acmicpc.net

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;
const int MAX = 35;
long long answer = 0;
int n;
int map[MAX][MAX];
vector<pair<int, int>> pipe;
//int shape = 0; //0:가로, 1:세로, 2:대각선
struct MOVE { int x, y; };
MOVE mv[3] = { {0,1}, {1,1}, {1,0} };
long long dp[3][MAX][MAX];

int main(void) {
	cin >> n;

	memset(dp, 0, sizeof(dp));

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> map[i][j];
		}
	}

	dp[0][0][1] = 1;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (map[i][j + 1] == 0)	dp[0][i][j + 1] += (dp[0][i][j] + dp[2][i][j]);
			if (map[i + 1][j] == 0)	dp[1][i + 1][j] += (dp[1][i][j] + dp[2][i][j]);
			if (map[i + 1][j + 1] == 0 && map[i][j + 1] == 0 && map[i + 1][j] == 0)	dp[2][i + 1][j + 1] += (dp[0][i][j] + dp[1][i][j] + dp[2][i][j]);
		}
	}

	answer = dp[0][n - 1][n - 1] + dp[1][n - 1][n - 1] + dp[2][n - 1][n - 1];
	cout << answer << endl;
}

'백준 알고리즘 > 구현' 카테고리의 다른 글

모노미노도미노 2  (0) 2021.10.15
청소년 상어 C++  (0) 2021.10.14
파이프 옮기기 1 C++  (0) 2021.10.13
어른 상어 C++  (0) 2021.10.13
컨베이어 벨트 위의 로봇  (0) 2021.10.12