• 문제 링크
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
• 풀이 과정
[백준] 10844 쉬운 계단 수 - Dynamic Programming / Java
• 문제 링크 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net • 풀이 과정 dp 배열을 2차원 배열로 정의하였으며, 이는 dp[자릿수][자릿값] 을 의미한
graycode.tistory.com
위 문제와 유사하게 2차원 dp 배열로 접근하여 풀이한다.
이친수는 0으로 시작하지 않는 조건에 의하여 dp[1][0] = 0, dp[1][1] = 1 으로 초기화하고,
1이 두 번 연속으로 나타나지 않는 조건에 의하여
자릿값이 0 일 시 이전 자릿수의 값은 0, 1 모두 가능하고,(dp[i][0] = dp[i - 1][0] + dp[i - 1][1])
자릿값이 1 일 시 이전 자릿수의 값은 0만 가능하다.(dp[i][1] = dp[i - 1][0])
이 후 n 자리의 이친수의 개수 dp[n][0] + dp[n][1] 을 정답으로써 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public 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());
long[][] dp = new long[n + 1][2];
dp[1][0] = 0;
dp[1][1] = 1;
for (int i = 2; i <= n; i++) {
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 1][0];
}
bw.write(dp[n][0] + dp[n][1] + "\n");
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 1699 제곱수의 합 - Dynamic Programming / Java (0) | 2022.08.26 |
---|---|
[백준] 1912 연속합 - Dynamic Programming / Java (0) | 2022.08.25 |
[백준] 10844 쉬운 계단 수 - Dynamic Programming / Java (0) | 2022.08.23 |
[백준] 1389 케빈 베이컨의 6단계 법칙 - Graph Theory / Java (0) | 2022.08.22 |
[백준] 11404 플로이드 - Graph Theory / Java (0) | 2022.08.21 |
댓글