🐣 알고리즘 삐약/💻 백준 삐약
78 삐약 : 백준 2193| 이친수 [바킹독 문제 풀이|DP|JAVA]
우주수첩
2024. 6. 18. 17:06
728x90
package BKD_0x10_DP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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[91][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];
}
System.out.println(dp[N][0] + dp[N][1]);
}
}
이전에 풀었던 문제에서 이차원 배열을 사용해서 문제를 해결했던 기억이 있기에
하. 또 적용해서 풀 때가 된건가. 나란 사람 진짜 어메이징 하다. 내 적용 능력 확인 쌉가능 어디 한번 덤벼보셈 하고
처음 접근 할 때는 끝자리가 0인경우와 1인 경우를 생각해서 진행했다.
그래서 끝자리가 0인 이친수의 개수, 1인 이친수의 개수를 따로 계산하여 저장하였고 점화식은
dp[i][0] = dp[i-1][0]+dp[i-1][1];
dp[i][1] = dp[i-1][0];
이렇게 세웠다.
추가적으로 전체 개수 기준으로 생각 해 보니
1 - 1 - 2 - 3 - 5 .... 순으로 증가하더라
어디서 많이 본 그거다
package BKD_0x10_DP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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[91];
dp[0] = 0;
dp[1] = 1;
for(int i=2;i<=N;i++){
dp[i] = dp[i-1]+dp[i-2];
}
System.out.println(dp[N]);
}
}
이렇게도 된다.
위에게 윗 코드
아래있는게 아래 코드이다
728x90