Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- coding test
- bytebuddyinterceptor
- 백준 섬의갯수
- attvalue
- beakjoon
- baekjoon 16953
- 안전영역 java
- beakjoon11725
- springboot
- dfs
- html error
- baekjoon
- baekjoon 3187
- baekjoon 2468
- baekjoon1012
- beakjoon 1697
- BFS
- baekjoon 2667
- java.lang.nosuchmethoderror
- Error
- 단지 번호붙이기
- backjoon 16173
- baekjoon 14714
- 백준 현수막
- spring boot
- websecurityconfiguration
- 백준 2667 java
- exprectedbelow
- CodingTest
- baekjoon 4963
Archives
- Today
- Total
NOT FOUND
DP 기초: 피보나치 수 2748, 1로 만들기 1463 Java 본문
1) 피보나치 수 https://www.acmicpc.net/problem/2748
2) 1로 만들기 https://www.acmicpc.net/problem/1463
1) 피보나치 수
간단히 푸는 방법도 있는데 해당글을 참고해서 DP 방식으로 풀어보았다
DP는 반복되는 문제는 한 번만 풀어야 하는데(메모제이션) 그냥 풀면 DP 방식이 아닌것 같다
public class baekjoon_2748 {
static int N;
static int count = 0;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N + 1];
arr[0] = 0;
arr[1] = 1;
int result = dp(N);
System.out.println(result);
}
public static int dp(int n) {
if(n == 0) return arr[0];
if(n == 1) return arr[1];
if(arr[n] == 0) {
arr[n] = dp(n-1) + dp(n-2);
}
return arr[n];
}
}
2) 1로 만들기
!!
처음 보면 아래 함수가 이해하기 쉽다
int recur(int n, int count) {
if (n == 1) return count;
int result = Integer.MAX_VALUE;
if (n % 3 == 0) result = Math.min(result, recur(n / 3, count + 1));
if (n % 2 == 0) result = Math.min(result, recur(n / 2, count + 1));
result = Math.min(result, recur(n - 1, count + 1));
return result;
}
그런데 다른 코드를 보면 아래와같이 하곤 한다
return Math.min(recur(N / 2, count + 1 + (N % 2)), recur(N / 3, count + 1 + (N % 3)));
이는 최적화한것으로,
count + 1 + (N%2) 부분에 '-1을 뺀다는 동작'이 담겨있는 것이다
나누기가 안될 경우 (나머지가 나올 경우) -1을 뺀 동작을 했다고 치고 count에 더해주는 것이다 (N%2, N%3) 부분
'coding test' 카테고리의 다른 글
| 코테 스터디 마무리 및 후원 (0) | 2025.06.10 |
|---|---|
| [코테] 백준 14716 현수막: DFS Java (1) | 2025.05.29 |
| [코테] 백준 16173 점프왕 쩰리: DFS Java (2) | 2025.05.28 |
| [코테] 백준 13565 침투: DFS Java (0) | 2025.05.28 |
| [코테] 백준 2468 안전 영역: DFS Java (1) | 2025.05.14 |