728x90
반응형
내가 푼 풀이가 틀렸다고 나왔길래 정답을 찾아서 비교해보는 과정을 거쳤다. 괄호를 붙이지 않아 우선순위 적용이 잘못 되었었다.
- 수정 전
dp2[0][i] = dp2[0][i-1]+dp2[1][i-1]+dp2[2][i-1] % 9901;
dp2[1][i] = dp2[0][i-1]+dp2[2][i-1] % 9901;
dp2[2][i] = dp2[0][i-1]+dp2[1][i-1] % 9901;
- 수정 후
dp2[0][i] = (dp2[0][i-1]+dp2[1][i-1]+dp2[2][i-1]) % 9901;
dp2[1][i] = (dp2[0][i-1]+dp2[2][i-1]) % 9901;
dp2[2][i] = (dp2[0][i-1]+dp2[1][i-1]) % 9901;
- 풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N;
static final int MOD = 9901;
static long dp[][];
static long dp2[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
solution1(N);
solution2(N);
System.out.println(test2(N));
}
private static long test2(int N) {
return (dp2[0][N]+dp2[1][N]+dp2[2][N])%9901;
}
private static long test1(int N) {
long ans = (dp[N][0] + dp[N][1] + dp[N][2]) % MOD;
return ans;
}
private static void solution1(int N) throws IOException {
dp = new long[N + 1][3];
dp[1][0] = dp[1][1] = dp[1][2] = 1; // 기저 사례
for (int i = 2; i <= N; i++) {
dp[i][0] = (dp[i - 1][0] + dp[i - 1][1] + dp[i - 1][2]) % MOD;
dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % MOD;
dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % MOD;
}
long ans = (dp[N][0] + dp[N][1] + dp[N][2]) % MOD;
System.out.println(ans);
}
public static void solution2(int N) {
dp2 = new long[3][N+1];
dp2[0][1] = 1;
dp2[1][1] = 1;
dp2[2][1] = 1;
for (int i = 2; i <= N; i++) {
dp2[0][i] = (dp2[0][i-1]+dp2[1][i-1]+dp2[2][i-1]) % 9901;
dp2[1][i] = (dp2[0][i-1]+dp2[2][i-1]) % 9901;
dp2[2][i] = (dp2[0][i-1]+dp2[1][i-1]) % 9901;
}
System.out.println((dp2[0][N]+dp2[1][N]+dp2[2][N])%9901);
}
}
728x90
반응형
'알고리즘 > DP' 카테고리의 다른 글
[백준] 2775번 부녀회장이 될테야 #Java #DP (0) | 2022.05.07 |
---|---|
[백준] 11050번 이항 계수 1 #Java (0) | 2022.05.07 |
[백준] 2xN 타일링 (0) | 2021.11.17 |
[백준] 1로 만들기 (0) | 2021.11.16 |
[알고리즘] DP 공부해보기 (0) | 2021.11.10 |