728x90
반응형
2193 - 이친수
https://www.acmicpc.net/problem/2193
문제
이친수(pinary number): 0과 1로만 이뤄진 수
1. 0으로 시작 X
2. 1이 2번 연속으로 나타나지 X (11을 부분 문자열로 갖지 X)
ex. 1, 10, 100, 101, 1000, 1001 등
But, 0010101 or 101101은 X
입력: N (1 <= N <= 90)
출력: N자리 이친수의 개수
풀이
- `dp[i]`: 길이 i일 때 이친수의 개수
- `dp[i] = dp[i - 1] + dp[i - 2]`
- `dp[i - 1]`: 마지막 숫자가 0인 경우
- 앞에 무슨 숫자든 상관 X => 길이 N - 1의 모든 이친수에 0만 붙이면 됨
- `dp[i - 2]`: 마지막 숫자가 1인 경우
- 그 앞에 반드시 0이 와야 함 -> 마지막 두 자리가 01이어야 함 => 길이 N - 2 이친수만 올 수 있음
- `dp[i - 1]`: 마지막 숫자가 0인 경우
코드
import java.io.*;
// 이친수
public class boj_2193 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
long[] dp = new long[N + 1];
dp[1] = 1;
if (N >= 2) dp[2] = 1;
for (int i = 3; i <= N; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
System.out.println(dp[N]);
}
}
728x90
반응형
'💻 > 코딩테스트' 카테고리의 다른 글
[BOJ/DP] 백준 1699 - 제곱수의 합 (Java) (1) | 2025.06.03 |
---|---|
[BOJ/DP] 백준 2225 - 합분해 (Java) (0) | 2025.06.02 |
[BOJ/Greedy] 백준 1080 - 행렬 (Java) (1) | 2025.05.30 |
[BOJ/Greedy] 백준 1783 - 병든 나이트 (Java) (2) | 2025.05.30 |
[BOJ/BFSDFS] 백준 4963 - 섬의 개수 (Java) (1) | 2025.05.29 |