-
백준 11726 2xn 타일링 동적계획법 활용 2가지 풀이 ( Java )Problem Solving/Java 2019. 10. 24. 16:01반응형
- Bottom-up ( 반복문 활용 ) 방식
12345678910111213141516171819202122232425262728293031323334public class Main{public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));int n = Integer.parseInt(br.readLine());// 1 <= n <= 1,000int[] memo = new int[1001];memo[1] = 1;// 기저 사례 1. 크기가 2 x 1 인 직사각형을 타일로 채우는 방법은 1가지 뿐이다memo[2] = 2;// 기저 사례 2. 크기가 2 x 1 인 직사각형을 타일로 채우는 방법은 2가지 뿐이다for (int i = 3; i <= n; i++) {// 3부터 n까지는memo[i] = memo[i-1] + memo[i-2];// 기저 사례를 바탕으로 하나씩 쌓아나가고memo[i] %= 10007;// 문제의 요구대로 10007로 나눈 나머지를 저장한다}// memo[n]을 출력한다}}- Top-down ( 재귀 함수 호출 ) 방식
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public class Main{private static int[] memo;public static int tilling(int n) {if (n >= 0 && n <= 2) {memo[n] = n;// 기저 사례들 - 0,1,2 세팅return memo[n];}if (memo[n] > 0) {return memo[n];}memo[n] = tilling(n - 1) + tilling(n - 2);// 크기가 2 X N인 직사각형을 1 X 2, 2 X 1 타일로 채우는 방법의 수는// 마지막에 1 x 2 타일 하나가 올 때의 방법과 마지막에 2 X 1 타일 두개가 올 때의 방법의 합이다memo[n] %= 10007;return memo[n];}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));int n = Integer.parseInt(br.readLine());// 1 <= n <= 1,000memo = new int[n + 1];// n 까지 저장해야하니 메모 배열 n+1 까지 생성int answer = tilling(n);// 크기가 2 X N인 직사각형을 1 X 2, 2 X 1 타일로 채우는 방법의 수}}동적 계획법 문제들은 결국 점화식을 구하는 게 중요한 것 같다.
헷갈릴 때는 동적 계획법의 정의에 대해 다시 한번 상기해보고 문제에 접근하자
반응형'Problem Solving > Java' 카테고리의 다른 글
백준 9095 1, 2, 3 더하기동적계획법 활용 2가지 풀이 ( Java ) (2) 2019.10.25 백준 11727 2xn 타일링2 동적계획법 활용 2가지 풀이 ( Java ) (0) 2019.10.24 백준 1463번 1로 만들기 동적계획법 활용 2가지 풀이 ( Java ) (0) 2019.10.24 백준 2748번 피보나치 수열 동적계획법 활용 2가지 풀이 ( Java ) (0) 2019.10.24 백준 17103 골드바흐 파티션 문제풀이 ( Java ) (0) 2019.10.22