ryujh111   3년 전

#include

int main() {

int N;

int dp_0[31] = { 0, };

int dp_2[31] = { 0, };

scanf("%d", &N);

if (N < 1 || N % 2 != 0) {

printf("0");

return 0;

}

dp_0[2] = 3;

dp_2[2] = 2;

for (int j = 4; j < N - 1; j = j + 2) {

dp_0[j] = dp_0[j - 2] * 3 + dp_2[j - 2];

dp_2[j] = dp_2[j - 2] + dp_0[j - 2] * 2;

}

dp_0[N] = dp_0[N - 2] * 3 + dp_2[N - 2];

int ret = dp_0[N];

printf("%d", ret);

return 0;

}

작성한 코드는 위와 같습니다.

(j번째 열에 타일이 3개 존재하는 경우(dp_0 배열)와 1개 존재하는 경우(dp_2 배열)로 나누어서 생각해봤습니다.)

로컬에서 시도했을때 정답은 도출되는것처럼 보이지만 제출시에는 틀렸습니다 로 나옵니다.

홀수 및 음수를 막기위해 if (N < 1 || N % 2 != 0) 조건문도 추가하였는데 여전히 맞습니다가 나오지 않습니다..

고수님들 조언 부탁드립니다..


감사합니다!

gyuho965   3년 전

input : 2

output : 0

answer : 3

반례입니다. dp_0[0] =1을 주면 되겠네요.

ryujh111   3년 전

감사합니다. 반성하겠습니다..

댓글을 작성하려면 로그인해야 합니다.