Skip to content

Commit 0a8d3eb

Browse files
committed
[Silver III] Title: 이친수, Time: 104 ms, Memory: 14264 KB -BaekjoonHub
1 parent 85ec1c7 commit 0a8d3eb

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# [Silver III] 이친수 - 2193
2+
3+
[문제 링크](https://www.acmicpc.net/problem/2193)
4+
5+
### 성능 요약
6+
7+
메모리: 14264 KB, 시간: 104 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍
12+
13+
### 제출 일자
14+
15+
2025년 9월 27일 00:17:07
16+
17+
### 문제 설명
18+
19+
<p>0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다.</p>
20+
21+
<ol>
22+
<li>이친수는 0으로 시작하지 않는다.</li>
23+
<li>이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다.</li>
24+
</ol>
25+
26+
<p>예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다.</p>
27+
28+
<p>N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램을 작성하시오.</p>
29+
30+
### 입력
31+
32+
<p>첫째 줄에 N이 주어진다.</p>
33+
34+
### 출력
35+
36+
<p>첫째 줄에 N자리 이친수의 개수를 출력한다.</p>
37+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.io.*;
2+
import java.util.Arrays;
3+
4+
5+
class Main {
6+
static long pay[][] = new long[92][2];
7+
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
11+
int N = Integer.parseInt(br.readLine());
12+
pay[1][0] = 0;
13+
pay[1][1] = 1;
14+
15+
pay[2][0] = 1;
16+
pay[2][1] = 0;
17+
18+
System.out.println(dp(N,-1));
19+
}
20+
21+
private static long dp(int n,int ze) {
22+
if (pay[n][0] + pay[n][1] != 0) {
23+
if (ze==-1){
24+
return pay[n][0] + pay[n][1];
25+
}
26+
else if (ze==0){
27+
return pay[n][0];
28+
}else return pay[n][1];
29+
30+
}
31+
pay[n][1] = dp(n-1,0) ;
32+
pay[n][0] = dp(n-1,1) + dp(n-1,0);
33+
if (ze==-1){
34+
return pay[n][0] + pay[n][1];
35+
}
36+
else if (ze==0){
37+
return pay[n][0];
38+
}else return pay[n][1];
39+
40+
}
41+
}
42+
43+
44+
45+

0 commit comments

Comments
 (0)