https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
접근법 :
**1) 어떻게 풀 것인가?**
dp문제이다
**2) 시간복잡도**
2초로, 넉넉한 편이다.
**3) 공간복잡도**
128mb인데 n이 90이하이므로 int로 하기엔 부족하고, long으로 해야한다.
**4) 풀면서 놓쳤던점**
dp문제임을 이미 알고 있던 사항인데 뭔가 문제를 풀 생각을 하지 않고 노가다로 풀려고 했다.
6까지 해봤을때 전 차수보다 +1씩 늘어나길래 아무 생각없이 그렇게 코드를 짰더니 틀렸다.
dp문제가 너무 오랜만이라그런지 어떻게 푸는지 감을 잃었다.
**5) 이 문제를 통해 얻어갈 것**
어떻게 풀지 논리적으로 생각하고 이를 dp로 풀어나갈것.
이 문제는 1이 연속으로 오면 안 되므로
만약 n자리수가 1 이라고 하면 [n-1]은 0이 된다. 그리고 [n-2]는 0이나 1이 될 수 있다.
만약 n자리수가 0 이라고 하면 [n-1]은 0 혹은 1이 된다.
그러면 dp[n] = dp[n-1] + dp[n-2]가 된다. (n자리수가 0일 경우와 1일경우의 합)
import java.io.*;
public class Main {
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[91];
dp[1] = dp[2] = 1;
if(n ==1 || n ==2){
System.out.println(dp[n]);
}
else{
for(int i=3; i<=n;i++){
dp[i] = dp[i-1]+dp[i-2];
}
System.out.println(dp[n]);
}
}
}
'study > 백준' 카테고리의 다른 글
[백준문제풀이] 10026 적록색약 java (0) | 2023.09.27 |
---|---|
[백준문제풀이] 1965 상자넣기 java (0) | 2023.09.20 |
[백준문제풀이] 7576 토마토 java 문제풀이 (0) | 2023.08.20 |
[백준문제풀이] 2042 구간 합 구하기 java 풀이 (0) | 2023.08.20 |
[백준문제풀이] 11003 최솟값 찾기 java 풀이 (0) | 2023.08.20 |