BOJ::17069 파이프 옮기기 2

시사점

이해(3)

설계, 손 코딩(1)

시간 복잡도

공간 복잡도

손 코딩 후 문제 리뷰(x)

구현(13)

함수 List

업데이트 되는 변수

실제 구현

#include<bits/stdc++.h>
#define endl '\n'
#define rep(i,a,b) for(int i=a;i<b;i++)
const int MAXN = 32+4, MAXSTATUS = 3;
using namespace std;
typedef long long ll;

int n;
int a[MAXN][MAXN];
ll dp[MAXN][MAXN][MAXSTATUS];
void process(){
    cin >> n; rep(i, 1, n+1) rep(j, 1, n+1) cin >> a[i][j];
    dp[1][2][0] = 1;
    rep(i, 1, n+1){
        rep(j, 1, n+1){
            if(a[i][j+1] != 1) dp[i][j+1][0] += dp[i][j][0] + dp[i][j][2];
            if(a[i+1][j] != 1) dp[i+1][j][1] += dp[i][j][1] + dp[i][j][2];
            if(a[i+1][j] != 1 && a[i][j+1] != 1 && a[i+1][j+1] != 1) dp[i+1][j+1][2]+= dp[i][j][0] + dp[i][j][1] + dp[i][j][2];
        }
    }
    cout << dp[n][n][0] + dp[n][n][1] + dp[n][n][2] << endl;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    process();
    return 0;
}

구현 후 코드리뷰 + 예제 돌려보기(x)

디버깅(x)

좋은 코드

최적화