Skip to content

Commit

Permalink
day10: (2) dp/2133, dp/9461
Browse files Browse the repository at this point in the history
  • Loading branch information
CheolHoJung committed May 3, 2019
1 parent 6b1aa4d commit c0923ee
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ algorithm-practice
[~~2557~~](https://www.acmicpc.net/problem/2557), [~~1000~~](https://www.acmicpc.net/problem/1000), [~~2558~~](https://www.acmicpc.net/problem/2558), [~~10950~~](https://www.acmicpc.net/problem/10950), [~~10951~~](https://www.acmicpc.net/problem/10951), [~~10952~~](https://www.acmicpc.net/problem/10952), [~~10953~~](https://www.acmicpc.net/problem/10953), [~~11021~~](https://www.acmicpc.net/problem/11021), [~~11022~~](https://www.acmicpc.net/problem/11022), [~~11718~~](https://www.acmicpc.net/problem/11718), [~~11719~~](https://www.acmicpc.net/problem/11719), [~~11720~~](https://www.acmicpc.net/problem/11720), [~~11721~~](https://www.acmicpc.net/problem/11721), [~~2741~~](https://www.acmicpc.net/problem/2741), [~~2742~~](https://www.acmicpc.net/problem/2742), [~~2739~~](https://www.acmicpc.net/problem/2739), [~~1924~~](https://www.acmicpc.net/problem/1924), [~~8393~~](https://www.acmicpc.net/problem/8393), [~~10818~~](https://www.acmicpc.net/problem/10818), [~~2438~~](https://www.acmicpc.net/problem/2438), [~~2439~~](https://www.acmicpc.net/problem/2439), [~~2440~~](https://www.acmicpc.net/problem/2440), [~~2441~~](https://www.acmicpc.net/problem/2441), [~~2442~~](https://www.acmicpc.net/problem/2442), [~~2445~~](https://www.acmicpc.net/problem/2445), [~~2522~~](https://www.acmicpc.net/problem/2522), [~~2446~~](https://www.acmicpc.net/problem/2446), [~~10991~~](https://www.acmicpc.net/problem/10991), [~~10992~~](https://www.acmicpc.net/problem/10992)

### DP
[~~1463~~](https://www.acmicpc.net/problem/1463), [~~11726~~](https://www.acmicpc.net/problem/11726), [~~11727~~](https://www.acmicpc.net/problem/11727), [~~9095~~](https://www.acmicpc.net/problem/9095), [~~10844~~](https://www.acmicpc.net/problem/10844), [~~11057~~](https://www.acmicpc.net/problem/11057), [~~2193~~](https://www.acmicpc.net/problem/2193), [~~9465~~](https://www.acmicpc.net/problem/9465), [~~2156~~](https://www.acmicpc.net/problem/2156), [~~11053~~](https://www.acmicpc.net/problem/11053), [~~11055~~](https://www.acmicpc.net/problem/11055), [~~11722~~](https://www.acmicpc.net/problem/11722), [~~11054~~](https://www.acmicpc.net/problem/11054), [~~1912~~](https://www.acmicpc.net/problem/1912), [~~2579~~](https://www.acmicpc.net/problem/2579), [~~1699~~](https://www.acmicpc.net/problem/1699), [2133](https://www.acmicpc.net/problem/2133), [9461](https://www.acmicpc.net/problem/9461), [2225](https://www.acmicpc.net/problem/2225), [2011](https://www.acmicpc.net/problem/2011), [11052](https://www.acmicpc.net/problem/11052)
[~~1463~~](https://www.acmicpc.net/problem/1463), [~~11726~~](https://www.acmicpc.net/problem/11726), [~~11727~~](https://www.acmicpc.net/problem/11727), [~~9095~~](https://www.acmicpc.net/problem/9095), [~~10844~~](https://www.acmicpc.net/problem/10844), [~~11057~~](https://www.acmicpc.net/problem/11057), [~~2193~~](https://www.acmicpc.net/problem/2193), [~~9465~~](https://www.acmicpc.net/problem/9465), [~~2156~~](https://www.acmicpc.net/problem/2156), [~~11053~~](https://www.acmicpc.net/problem/11053), [~~11055~~](https://www.acmicpc.net/problem/11055), [~~11722~~](https://www.acmicpc.net/problem/11722), [~~11054~~](https://www.acmicpc.net/problem/11054), [~~1912~~](https://www.acmicpc.net/problem/1912), [~~2579~~](https://www.acmicpc.net/problem/2579), [~~1699~~](https://www.acmicpc.net/problem/1699), [~~2133~~](https://www.acmicpc.net/problem/2133), [~~9461~~](https://www.acmicpc.net/problem/9461), [2225](https://www.acmicpc.net/problem/2225), [2011](https://www.acmicpc.net/problem/2011), [11052](https://www.acmicpc.net/problem/11052)

### 기타
[2751](https://www.acmicpc.net/problem/2751), [11650](https://www.acmicpc.net/problem/11650), [11651](https://www.acmicpc.net/problem/11651), [10814](https://www.acmicpc.net/problem/10814), [10825](https://www.acmicpc.net/problem/10825), [10989](https://www.acmicpc.net/problem/10989), [11652](https://www.acmicpc.net/problem/11652), [11004](https://www.acmicpc.net/problem/11004), [10828](https://www.acmicpc.net/problem/10828), [9012](https://www.acmicpc.net/problem/9012), [10799](https://www.acmicpc.net/problem/10799), [10845](https://www.acmicpc.net/problem/10845), [10866](https://www.acmicpc.net/problem/10866), [10808](https://www.acmicpc.net/problem/10808), [10809](https://www.acmicpc.net/problem/10809), [10820](https://www.acmicpc.net/problem/10820), [2743](https://www.acmicpc.net/problem/2743), [11655](https://www.acmicpc.net/problem/11655), [10824](https://www.acmicpc.net/problem/10824), [11656](https://www.acmicpc.net/problem/11656), [1406](https://www.acmicpc.net/problem/1406), [1158](https://www.acmicpc.net/problem/1158), [1168](https://www.acmicpc.net/problem/1168), [10430](https://www.acmicpc.net/problem/10430), [2609](https://www.acmicpc.net/problem/2609), [1934](https://www.acmicpc.net/problem/1934), [1850](https://www.acmicpc.net/problem/1850), [9613](https://www.acmicpc.net/problem/9613), [11005](https://www.acmicpc.net/problem/11005), [2745](https://www.acmicpc.net/problem/2745), [1373](https://www.acmicpc.net/problem/1373), [1212](https://www.acmicpc.net/problem/1212), [2089](https://www.acmicpc.net/problem/2089), [11576](https://www.acmicpc.net/problem/11576), [1978](https://www.acmicpc.net/problem/1978), [1929](https://www.acmicpc.net/problem/1929), [6588](https://www.acmicpc.net/problem/6588), [11653](https://www.acmicpc.net/problem/11653), [10872](https://www.acmicpc.net/problem/10872), [1676](https://www.acmicpc.net/problem/1676), [2004](https://www.acmicpc.net/problem/2004)
Expand Down
78 changes: 78 additions & 0 deletions dp/q_타일_채우기.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package test.boj.dp;

import org.junit.*;

import java.io.*;

// https://mizzo-dev.tistory.com/entry/baekjoon2133 참고
public class q_타일_채우기 {

@Test
public void test() {
System.out.println(solution(3));
System.out.println(solution(4));
System.out.println(solution(5));
System.out.println(solution(6));
System.out.println(solution(30));
}

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());
bw.write(String.valueOf(solution(N)));

br.close();
bw.flush();
bw.close();
}

// dp[2] = 3
// dp[2]는 고유조합이 없으므로 3을 사용
// 나머지는 고유조합이 2개씩 존재

// dp[4] = dp[2] dp[2] = dp[2] * dp[2] = 9
// dp[4]의 고유 조합 = 2
// 9 + 2 = 11

// 1. dp[4]를 치환해보자.
// dp[2] dp[4] = dp[2] (dp[2] dp[2])
// dp[2] (dp[4]의 고유 조합)
// dp[2] (dp[2] dp[2])에서 dp[2]를 괄호 뒤로 뗴어 붙일 수가 없다
// 반면, dp[2] (dp[4]의 고유 조합)는 (dp[4]의 고유 조합) dp[2]처럼 괄호 뒤로 뗴어 붙일 수가 있다.

// dp[6]으로 돌아와서
// dp[6] = dp[2] dp[4]
// dp[6]의 고유 조합
// 1.에서 (dp[4]의 고유 조합)이 뒤에 한번밖에 사용되지 않았다. 앞에도 사용하자.

// dp[6] = dp[2] dp[2] dp[2]
// dp[2] (dp[4]의 고유 조합)
// (dp[4]의 고유 조합) dp[2]
// dp[6]의 고유 조합
//
// dp[2] dp[2] dp[2]과 dp[2] (dp[4]의 고유 조합)은 dp[2] dp[4]이므로 dp[6]을 다시 정리하면 다음과 같다.
// dp[2]는 (dp[2]의 고유조합)과 같다
// dp[6] = dp[2] dp[4] = 3 * 11 = 33
// (dp[4]의 고유 조합) dp[2] = 2 * 3 = 6
// (dp[6]의 고유 조합) = 2
// 33 + 6 + 2 = 41
public static int solution(int N) {
if (N < 2) return 0;

int[] dp = new int[N + 1];
// dp[i - j]에서 dp[0]에 접근하기 때문에 1로 설정
dp[0] = 1;
dp[2] = 3;

for (int i = 4; i <= N; i+=2) {
for (int j = 2; j <= i; j += 2) {
int std = j == 2 ? 3 : 2;
dp[i] += std * dp[i - j];
}
}

return dp[N];
}
}
59 changes: 59 additions & 0 deletions dp/r_파도반_수열.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package test.boj.dp;

import org.junit.*;

import java.io.*;

import static org.assertj.core.api.Assertions.assertThat;

public class r_파도반_수열 {

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 tCase = Integer.parseInt(br.readLine());

for (int i = 0; i < tCase; i++) {
int N = Integer.parseInt(br.readLine());
bw.write(String.valueOf(solution(N)) + "\n");
}

br.close();
bw.flush();
bw.close();
}

@Test
public void test() {
assertThat(solution(1))
.isEqualTo(1L);
assertThat(solution(2))
.isEqualTo(1L);
assertThat(solution(12))
.isEqualTo(16L);
assertThat(solution(100))
.isEqualTo(888855064897L);
}


// i 1 2 3 4 5 6 7 8 9 10 11
// dp[i] 1 1 1 2 2 3 4 5 7 9 12
// 1 1 1 2 2 2 + 1 3 + 1 4 + 1 5 + 2 7 + 2 9 + 3
// 1 1 1 2 2 dp[5] + dp[1..3] dp[6] + dp[1..3] dp[7] + dp[1..3] dp[8] + dp[4..5] dp[9] + dp[4..5] dp[10] + dp[6]
// -> dp[i - 1] + dp[i - 5] (i > 5)
private static long solution(int N) {
long[] dp = new long[101];
dp[1] = 1;
dp[2] = 1;
dp[3] = 1;
dp[4] = 2;
dp[5] = 2;

for (int i = 6; i <= N; i++) {
dp[i] = dp[i - 1] + dp[i - 5];
}

return dp[N];
}
}

0 comments on commit c0923ee

Please sign in to comment.