glowing713
Frontend-Deep-Dive
glowing713
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (97)
    • Languages (11)
      • JavaScript πŸ’› (3)
      • Python 🐍 (4)
      • Java β˜•οΈ (3)
      • Swift 🧑 (1)
    • Computer_Science (1)
      • Computer_Network πŸ•Έ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring πŸ€ (1)
    • AI (2)
      • NLP πŸ—£ (1)
      • AI_Math βž— (1)
    • κ°œλ°œν™˜κ²½ κΎΈλ―ΈκΈ° ✌ (1)
    • 생각정리 ✍🏻 (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ§‘πŸ»β€πŸ’»Github

곡지사항

인기 κΈ€

νƒœκ·Έ

  • 카카였 기좜
  • BOJ
  • Java
  • Algorithm
  • mst
  • bfs
  • λ™μ κ³„νšλ²•
  • 이뢄탐색
  • Python
  • Stack
  • c++
  • ps
  • brute-force
  • DP
  • binary search
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • 완전탐색
  • 2019 카카였 개발자 겨울 인턴십
  • Baekjoon
  • boostcampaitech

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
glowing713

Frontend-Deep-Dive

[BOJ] λ°±μ€€ 1463 1둜 λ§Œλ“€κΈ° / 동적 κ³„νšλ²•(Dynamic-Programming)
Problem_Solving

[BOJ] λ°±μ€€ 1463 1둜 λ§Œλ“€κΈ° / 동적 κ³„νšλ²•(Dynamic-Programming)

2020. 2. 27. 18:13

이미지λ₯Ό ν΄λ¦­ν•˜λ©΄ 문제 μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.


 

πŸ’£ λ¬Έμ œ 이해

 

1. Xκ°€ 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄, 3으둜 λ‚˜λˆˆλ‹€.

2. Xκ°€ 2둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄, 2둜 λ‚˜λˆˆλ‹€.

3. 1을 λΊ€λ‹€.

4, μ •μˆ˜ N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μœ„μ™€ 같은 μ—°μ‚° μ„Έ 개λ₯Ό μ΄μš©ν•˜μ—¬ 1을 λ§Œλ“€κ³ μž ν•œλ‹€.

 

μ΄λ•Œ, ν•„μš”ν•œ μ—°μ‚° 횟수의 μ΅œμ†Œκ°’μ„ κ΅¬ν•˜λŠ” 것이 λͺ©ν‘œμ΄λ‹€.

 

동적 κ³„νšλ²•(Dynamic Programming) 방식을 μ‚¬μš©ν–ˆλ‹€.

 

 

πŸ’­ 풀이 κ³Όμ •

 

λ°”ν…€μ—…(Bottom-Up) λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν–ˆλ‹€. (λ‹€λ₯Έ λΆ„λ“€ 풀이λ₯Ό λ³΄λ‹ˆ, νƒ‘λ‹€μš΄ 방식도 있고 λ‹€μ–‘ν–ˆλ‹€.. λ‚˜λΉΌκ³  λ‹€μ²œμž¬μΈλ“―...)

μž…λ ₯ κ°’μ˜ μ΅œλŒ€κ°€ 106 (1,000,000) μ΄λ―€λ‘œ 크기가 100만이고 각 μ›μ†Œλ₯Ό 100만으둜 μ΄ˆκΈ°ν™”ν•œ int ν˜• 벑터λ₯Ό μ‚¬μš©ν–ˆλ‹€.

벑터 λ‚΄λΆ€ 각 μ›μ†ŒλŠ” κ·Έ 인덱슀 λ²ˆν˜Έμ— ν•΄λ‹Ήν•˜λŠ” 숫자의 μ—°μ‚° 횟수λ₯Ό κ°’μœΌλ‘œ κ°€μ§€κ³  μžˆλ‹€.

(map[i]λŠ” ν˜„μž¬ κΈ°μ€€ 숫자 i의 μ—°μ‚° 횟수)

 

i번째 μΈλ±μŠ€λΆ€ν„° μ§„ν–‰ν•˜λ©΄μ„œ i+1, i*2, i*3 의 κΈ°μ‘΄ μ—°μ‚° νšŸμˆ˜λ³΄λ‹€ 더 μž‘μ€ 경우 λŒ€μ²΄ν•˜λŠ” 방식이닀.

결과적으둜 map λ²‘ν„°μ—λŠ” 각 인덱슀 λ²ˆν˜Έμ— ν•΄λ‹Ήν•˜λŠ” 숫자의 μ΅œμ†Œ μ—°μ‚° νšŸμˆ˜κ°€ κΈ°λ‘λœλ‹€.

 

μž‘μ„± μ–Έμ–΄: C++

 

#include <cstdio>
#include <vector>
using namespace std;

int main(){
    int num = 0;
    vector<int> map(1000001, 1000000);
    map[0] = 0;
    map[1] = 0;
    // map[i]λŠ” ν˜„μž¬ κΈ°μ€€ 숫자 i의 μ—°μ‚° 횟수
    for (int i = 1; i < map.size(); ++i) {
        int operCnt = map[i] + 1;   // ν˜„μž¬ 숫자의 μ—°μ‚° νšŸμˆ˜μ— 1을 더함(+1, *2, *3 λͺ¨λ‘ 연산을 ν•œ 번 더 ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ)
        /********* +1 ν•˜λŠ” 경우 *********/
        // i+1의 κΈ°μ‘΄ μ—°μ‚° νšŸμˆ˜λ³΄λ‹€ 더 μž‘μ€ 경우 λŒ€μ²΄
        if(i+1 <= map.size() && operCnt < map[i+1])  map[i+1] = operCnt;
        /********* *2 ν•˜λŠ” 경우 *********/
        // i*2의 κΈ°μ‘΄ μ—°μ‚° νšŸμˆ˜λ³΄λ‹€ 더 μž‘μ€ 경우 λŒ€μ²΄
        if(i*2 <= map.size() && operCnt < map[i*2])  map[i*2] = operCnt;
        /********* *3 ν•˜λŠ” 경우 *********/
        // i*3의 κΈ°μ‘΄ μ—°μ‚° νšŸμˆ˜λ³΄λ‹€ 더 μž‘μ€ 경우 λŒ€μ²΄
        if(i*3 <= map.size() && operCnt < map[i*3])  map[i*3] = operCnt;
    }
    scanf("%d", &num);
    printf("%d\n", map[num]);
    return 0;
}

 

 

πŸ† 배운 점

 

DP 문제 ν’€μ΄μ˜ μ‹œμž‘μ΄λ‹€..!

 

열씨미 해봐야겠닀!!! 🐢

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Problem_Solving' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] λ°±μ€€ 2294 동전 2 / 동적 κ³„νšλ²•(Dynamic-Programming)  (0) 2020.03.03
[BOJ] λ°±μ€€ 9465 μŠ€ν‹°μ»€ / 동적 κ³„νšλ²•(Dynamic-Programming)  (0) 2020.03.02
[BOJ] λ°±μ€€ 1182 λΆ€λΆ„μˆ˜μ—΄μ˜ ν•© / μ™„μ „ 탐색(Brute-force Search)  (0) 2020.02.26
[BOJ] λ°±μ€€ 1018 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ° / μ™„μ „ 탐색(Brute-force Search)  (0) 2020.02.25
[BOJ] λ°±μ€€ 2503 숫자 야ꡬ / μ™„μ „ 탐색(Brute-force Search)  (0) 2020.02.24
    'Problem_Solving' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [BOJ] λ°±μ€€ 2294 동전 2 / 동적 κ³„νšλ²•(Dynamic-Programming)
    • [BOJ] λ°±μ€€ 9465 μŠ€ν‹°μ»€ / 동적 κ³„νšλ²•(Dynamic-Programming)
    • [BOJ] λ°±μ€€ 1182 λΆ€λΆ„μˆ˜μ—΄μ˜ ν•© / μ™„μ „ 탐색(Brute-force Search)
    • [BOJ] λ°±μ€€ 1018 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ° / μ™„μ „ 탐색(Brute-force Search)
    glowing713
    glowing713

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”