2133번 - 타일 채우기
#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);
작성한 코드는 위와 같습니다.
(j번째 열에 타일이 3개 존재하는 경우(dp_0 배열)와 1개 존재하는 경우(dp_2 배열)로 나누어서 생각해봤습니다.)
로컬에서 시도했을때 정답은 도출되는것처럼 보이지만 제출시에는 틀렸습니다 로 나옵니다.
홀수 및 음수를 막기위해 if (N < 1 || N % 2 != 0) 조건문도 추가하였는데 여전히 맞습니다가 나오지 않습니다..
고수님들 조언 부탁드립니다..
감사합니다!
input : 2
output : 0
answer : 3
반례입니다. dp_0[0] =1을 주면 되겠네요.
감사합니다. 반성하겠습니다..
댓글을 작성하려면 로그인해야 합니다.
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) 조건문도 추가하였는데 여전히 맞습니다가 나오지 않습니다..
고수님들 조언 부탁드립니다..
감사합니다!