티스토리 뷰
Bottomup 방식과 Topdown 방식이 있는데 일단 Bottomup 방식으로 풀었다.
n이 주어지면 2부터 n까지 for문이 돌면서 조건에 맞게 주어진 세개의 연산을 풀어낸다.
나누어 떨어지면이므로 if를 통해 검사하고 디폴트로 먼저 i 바로 전에서 구한 dp[i] 값에 +1을 해준다.
(2와 3으로 나누어지지 않아도 이미 연산을 한번 수행한 것이므로)
이후 2또는 3으로 나누어지면 그때 i와 i를 2 또는 3으로 나눈 값을 비교하여 작은 값을 dp[i] 에 넣어준다.
계속 헷갈렸던 것이 i의 값과 dp배열 각각의 원소의 값인데
각각의 원소의 값은 연산을 한 횟수이다. 출력되는 부분을 확인하면 쉽게 생각할 수 있음..
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.close();
int dp[] = new int[n+1];
dp[0] = dp[1] = 0;
for(int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + 1;
if(i % 2 == 0)
dp[i] = Math.min(dp[i], dp[i/2]+1);
if(i % 3 == 0)
dp[i] = Math.min(dp[i], dp[i/3]+1);
}
System.out.println(dp[n]);
}
}
'algorithm' 카테고리의 다른 글
[DP] 11057 (0) | 2020.04.20 |
---|---|
[DP] 타일링 문제 11726, 11727, 9095 (0) | 2020.04.15 |
[입출력] 별찍기 10992, 10991, 2446 (0) | 2020.04.12 |
[입출력] 1924, 8393, 10818, 2438 (0) | 2020.04.10 |
[입출력] 11721, 2741, 2739 (0) | 2020.04.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 입출력장치
- 동적프로그래밍
- 재귀함수
- 소프트웨어
- 세마포어
- 교착상태
- 클래스
- dfs
- 자료구조
- react
- 이진탐색
- stackframe
- 퀵정렬
- javascript
- 인접행렬
- 최단경로
- 병행프로세스
- 인접리스트
- client side rendering
- Stack
- server side rendering
- 알고리즘
- 배열
- C++
- Java
- BFS
- 구조체
- 운영체제
- 스텍
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함