๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/12980

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


1. ๋ฌธ์ œ

๋ชฉํ‘œ์ง€์  N์ด ์ฃผ์–ด์ง„๋‹ค.

N๊นŒ์ง€ ๊ฐ€๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐํ„ฐ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ตœ์†Œ๊ฐ€ ๋  ๋•Œ์˜ ์‚ฌ์šฉ๋Ÿ‰์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ ํ”„ - ์˜จ ๋งŒํผ ๊ฑฐ๋ฆฌ + 1 -> ๋ฐฐํ„ฐ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ + 1

์ˆœ๊ฐ„์ด๋™ - ์˜จ ๋งŒํผ ๊ฑฐ๋ฆฌ * 2 -> ๋ฐฐํ„ฐ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ทธ๋Œ€๋กœ

N์€ ์ตœ๋Œ€ 10์–ต์ด๋‹ค.

 

2. ํ’€์ด

์ฒ˜์Œ์—๋Š” DFS๋กœ ์ ‘๊ทผํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ N์€ ์ตœ๋Œ€ 10์–ต์ด์—ˆ๊ณ , N์ด 5000์ผ ๋•Œ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

๋‹จ๋‹จํžˆ ์˜คํ•ด๋ฅผ ํ–ˆ๋˜ ์ ‘๊ทผ์ด์—ˆ๋‹ค.

์ตœ์†Œํ•œ์˜ ๋ฐฐํ„ฐ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜จ ๋งŒํผ์˜ ๊ฑฐ๋ฆฌ*2 ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰, 2์˜ ๋ฐฐ์ˆ˜๋ฉด 2๋กœ ์ตœ๋Œ€ํ•œ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„ ๊ฐ’์„ ๊ตฌํ•˜๊ณ  ๊ฑฐ๊ธฐ์„œ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ตฌํ•˜๋Š” top-down ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

 

3. ์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Solution {
    
    public int solution(int n) {
        int ans = 0;
        
        while (n>0) {
            if (n % 2 ==0) {
                n/=2;
            } else {
                n--;
                ans++;
            }
        }

        return ans;
    }
}

 

4. ์š”์•ฝ

์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ง€๋งŒ ์ƒˆ๋กญ๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ ์ด ๋†’์•„์ง€๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

bottom-up ๋ณด๋‹ค top-down ๋ฐฉ์‹์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋” ์ค„์–ด๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค.