๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - (Level2)์ ํ”„์™€ ์ˆœ๊ฐ„ ์ด๋™

by ์ฃผ๋ฐœ2 2020. 3. 17.
๋ฐ˜์‘ํ˜•

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

 

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

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

programmers.co.kr

์ฝ”๋“œ

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

ํ’€์ด

๊ทœ์น™์„ ์ฐพ์•„๋ณด๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

K์นธ ์ ํ”„ํ•˜๋ฉด K๋งŒํผ์˜ ๊ฑด์ „์ง€ ์‚ฌ์šฉ๋Ÿ‰์ด ๋“ค๊ณ ,

(ํ˜„์žฌ์œ„์น˜ * 2) ๋งŒํผ ์ˆœ๊ฐ„์ด๋™ ํ•˜๋ฉด ๊ฑด์ „์ง€๋Š” ๋“ค์ง€ ์•Š๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ๊ฑด์ „์ง€ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œ๋กœ ํ•˜๋ ค๋ฉด ์ˆœ๊ฐ„์ด๋™์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ํ•ด์•ผํ•œ๋‹ค.

 

์ˆœ๊ฐ„์ด๋™์€ ํ˜„์žฌ์œ„์น˜ * 2์ด๋ฏ€๋กœ, 2๋ฐฐ์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

์ฃผ์–ด์ง„ n์ด 0์ด ๋ ๋•Œ๊นŒ์ง€(ํ˜„์žฌ ์œ„์น˜ ๋„์ฐฉ) ๋์—์„œ ๊ฑฐ๊พธ๋กœ ๋‚ด๋ ค์˜ค๋ฉด์„œ

2๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜(์ˆœ๊ฐ„์ด๋™), 1์„ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค(K์นธ ์ ํ”„)

5000์˜ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ๋“ค๋ฉด

2500 

1250

625 -> 624 , ๊ฑด์ „์ง€ + 1 , ans = 1

312

156

78

39 -> 38 ,  ๊ฑด์ „์ง€ + 1 , ans = 2

19 -> 18 ,  ๊ฑด์ „์ง€ +1 , ans = 3

9 -> 8 ,      ๊ฑด์ „์ง€ + 1 , ans = 4

4

2

1 -> 0(์ข…๋ฃŒ) ๊ฑด์ „์ง€ + 1 , ans = 5

๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ๋Š” 5๊ฐ€ ๋œ๋‹ค.

 

 

์œ„ ์ฝ”๋“œ๋ฅผ 3ํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‚˜ํƒ€๋ƒˆ๋‹ค.

public class Solution {
    public int solution(int n) {
        int ans = 0;
        while(n!=0){
            ans += (n%2 == 0) ? 0 : 1;
            n = (n%2 == 0) ? n/2 : n-1;
        }
        return ans;
    }
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€