scone-lemon
[DP 연습] BOJ_11726 2×n 타일링 (S3) 본문
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
이걸 생각해 내기까지도 1시간이 걸렸다. dp[0]부터 dp[4]까지 다 써보고 나서 차츰차츰 줄여가면서 점화식을 세워보려고 노력했다. 풀면서도 긴가민가 하고 아몰라! 하고 이클립스에서 돌려봤더니 출력도 잘 나오고 돌아가서 백준에 올려봤더니 틀렸다고 떴다!
구글링해서 코드를 비교해보니까 % 10007 부분을 반복문에서 처리해주는 차이가 있길래 반복문으로 올려줬더니 런타임 에러 (ArrayIndexOutOfBounds) 오류가 다시 났다. 그래서 코집사 코드를 보니까 배열 길이를 +2 해줬길래 나도 그렇게 고쳐줬더니 맞았다고 떴다. 맞은건 기쁜데 왜 % 10007 자리를 옮겨주어야 하는지도 모르겠고, 왜 +2를 해줘야 하는지도 모르겠어서 화가 났다. 내일 보충시간에 보충 교수님께 물어봐야 할 것 같다. 아 그리고 이것저것 이클립스에서 다 돌려보고 백준에서 돌려보게 직접 넣어볼 수 있는 예제도 백준에 많이많이 있었으면 좋겠다.
package algo0921;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 2*n 타일링
public class BOJ_11726 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[N + 1];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= N; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
System.out.println(dp[N] % 10007);
}
}
package algo0921;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 2*n 타일링
public class BOJ_11726_sol {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[N + 2];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= N; i++) {
dp[i] = (dp[i - 1] + dp[i - 2])%10007;
}
System.out.println(dp[N]);
}
}

'ALGORITHM > BOJ' 카테고리의 다른 글
[DP 연습] BOJ_9095 1,2,3 더하기 (S3) (0) | 2021.09.21 |
---|---|
[DP 연습] BOJ_11727 2×n 타일링 2 (S3) (0) | 2021.09.21 |
[DP 연습] BOJ_1463 1로 만들기 (S3) (0) | 2021.09.21 |
[DP 연습] BOJ_1932 정수 삼각형 (S1) (0) | 2021.09.19 |
[IM 대비] BOJ_1244 스위치 켜고 끄기 (0) | 2021.08.29 |