๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ๋‹ค์Œ ํฐ ์ˆซ์ž

by carrot0911 2025. 4. 16.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์กฐ๊ฑด 1. n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” n๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด 2. n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž์™€ n์€ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด 3. n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” ์กฐ๊ฑด 1, 2๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ 78(1001110)์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” 83(1010011)์ž…๋‹ˆ๋‹ค.

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • n์€ 1,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n result
78 83
15 23

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • 15(1111)์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” 23(10111)์ž…๋‹ˆ๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        // n์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, 1์˜ ๊ฐœ์ˆ˜ ์ €์žฅ
        String binaryN = Integer.toBinaryString(n);  // ์˜ˆ: 78 -> "1001110"
        binaryN = binaryN.replace("0", "");  // 0 ์ œ๊ฑฐ -> "1111"
        int nLength = binaryN.length();  // 1์˜ ๊ฐœ์ˆ˜ -> 4
        
        // n๋ณด๋‹ค 1 ํฐ ์ˆ˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋ฐ˜๋ณต
        int m = n+1;
        String binaryM = Integer.toBinaryString(m);
        binaryM = binaryM.replace("0", "");
        int mLength = binaryM.length();
        
        // 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while (nLength != mLength) {
            m++;  // ๋‹ค์Œ ์ˆ˜๋กœ ๋„˜์–ด๊ฐ
            
            binaryM = Integer.toBinaryString(m);  // ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
            binaryM = binaryM.replace("0", "");  // 0 ์ œ๊ฑฐํ•ด์„œ 1๋งŒ ๋‚จ๊น€
            mLength = binaryM.length();  // 1์˜ ๊ฐœ์ˆ˜ ์ €์žฅ
        }
        
        // answer์— m์˜ ๊ฐ’ ์ €์žฅ
        answer = m;
        
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

n์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ “0”์„ ๊ณต๋ฐฑ์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
๊ทธ๋‹ค์Œ ๊ธธ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค.
1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ๊ธธ์ด๊ฐ€ ๋™์ผํ•œ ๋‹ค์Œ ํฐ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค..?