티스토리 뷰

Coding/acmicpc

백준 1463:1로 만들기

이끼대백과 2018. 5. 9. 17:00

백준 1463번 1로 만들기 입니다. 제가 dp를 연습하기 시작했는데, 연습문제로 풀기에 좋은 문제같았습니다.

n이 주어지면 그 숫자를 1로 만드는데, -1 , /2, /3 (나누어 떨어진다면) 만큼 이동합니다. 이동할 때 이동횟수 + 1 을 해주는 것이 중요!

밑에는 제 코드입니다.

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
#include <iostream>
#include <algorithm>//min함수
#include <vector>
using namespace std;
 
vector<int> dp;
 
int make1(int n) {
    if (n == 1return 0;//도착
    if (dp[n] != -1return dp[n];//이미 계산했다면 그 값을 리턴
    int result = make1(n - 1+ 1;//-1만큼 이동해요 (이동하면 cnt++해요)
    if (!(n % 3)) result = min(result, make1(n / 3+ 1);//3의 배수라면 n/3으로 이동해요
    if (!(n % 2)) result = min(result, make1(n / 2+ 1);//2의 배수라면 n/2로 이동해요
 
    return dp[n] = result;//결과를 저장하고 리턴해요
}
 
int main(void) {
    int n;
    cin >> n;
    dp.resize(n + 1-1);
    cout << make1(n) << endl;
 
    return 0;
}
cs


'Coding > acmicpc' 카테고리의 다른 글

백준 1504:특정한 최단 경로  (0) 2018.07.24
백준 11066:파일 합치기  (0) 2018.07.18
백준 2573:빙산  (2) 2018.04.19
백준 2146:다리 만들기  (0) 2018.04.19
백준 5014:스타트링크  (0) 2018.04.16
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
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
글 보관함