Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- docker
- documentationpluginsbootstrapper
- 프로그래머스
- 21278
- 별자리 만들기
- 백준
- 호석이두마리치킨
- Java
- 알고리즘
- CMD
- Error fetching remote repo 'origin'
- 설정
- SpringBoot
- 2108_통계학
- 소가길을건너간이유6
- 날짜일수
- 14466
- Error
- 자바
- jenkins
- to display the conditions report re-run your application with 'debug' enabled
- 18222
- Eclipse
- dockercompose
- 20055
- 투에모스문자열
- 2167. 2차원 배열의 합
- 이산수학
- 이클립스
- EC2
Archives
- Today
- Total
계단을 오르듯이
4811. 알약 본문
- 규칙을 찾으려 했지만 역시 dp는 flat~!하게!!!
- 핵심은 3가지 였다.
- w=0일 경우는 h와 상관없이 1이다.
- [w] [h] 일 때, [w] [0] = [w-1] [1]의 값은 같다.
- www == wwh
- 연산은 두 가지의 방식이 존재한다.
- w가 h로 바뀐다. (w > 0)
- h의 개수가 1 감소한다. (h > 0)
- 이 3가지 규칙을 차례대로 정리하면 풀이가 끝난다.
package january.first;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class B_4811_알약 {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
long[][] dp = new long[32][32];
for (int i = 1; i < 31; i++) { // H만 있을 경우
dp[0][i] = 1;
}
for (int w = 1; w < 31; w++) {
for (int h = 0; h < 30; h++) { // else에서 H가 31일 경우가 나타나므로 29까지로 하고 출력 결과를 dp[N-1][1]로 함.
if (h == 0) {
dp[w][h] = dp[w - 1][1];
} else {
dp[w][h] = dp[w - 1][h + 1] + dp[w][h - 1];
}
}
}
while (true) {
int N = Integer.parseInt(in.readLine());
if (N == 0)
break;
sb.append(dp[N - 1][1] + "\n"); // dp[N][0]과 dp[N-1][1]이 같으므로
}
System.out.println(sb);
}
}
'알고리즘 > 백준_JAVA' 카테고리의 다른 글
17472. 다리 만들기 2 (0) | 2022.01.06 |
---|---|
20950. 미술가 미미 (0) | 2022.01.05 |
17073. 나무 위의 빗물 (0) | 2021.12.31 |
17478. 재귀함수가 뭔가요? (0) | 2021.12.31 |
17836. 공주님을 구해라 (0) | 2021.12.31 |