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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ์ด์ง„ ๋ณ€ํ™˜ ๋ฐ˜๋ณตํ•˜๊ธฐ

by carrot0911 2025. 4. 14.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

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

programmers.co.kr

0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ์–ด๋–ค ๋ฌธ์ž์—ด x์— ๋Œ€ํ•œ ์ด์ง„ ๋ณ€ํ™˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  1. x์˜ ๋ชจ๋“  0์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  2. x์˜ ๊ธธ์ด๋ฅผ c๋ผ๊ณ  ํ•˜๋ฉด, x๋ฅผ "c๋ฅผ 2์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•œ ๋ฌธ์ž์—ด"๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, x = "0111010"์ด๋ผ๋ฉด, x์— ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋ฉด x = "0111010" -> "1111" -> "100" ์ด ๋ฉ๋‹ˆ๋‹ค.

0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. s๊ฐ€ "1"์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ s์— ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ–ˆ์„ ๋•Œ, ์ด์ง„ ๋ณ€ํ™˜์˜ ํšŸ์ˆ˜์™€ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ์ œ๊ฑฐ๋œ ๋ชจ๋“  0์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • s์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 150,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • s์—๋Š” '1'์ด ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

s result
"110010101001" [3, 8]
"01110" [3, 3]
"1111111" [4,1]

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

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

"110010101001"์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์ฐจ ์ด์ง„ ๋ณ€ํ™˜ ์ด์ „ ์ œ๊ฑฐํ•  0์˜ ๊ฐœ์ˆ˜ 0 ์ œ๊ฑฐ ํ›„ ๊ธธ์ด ์ด์ง„ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ
1 "110010101001" 6 6 "110"
2 "110" 1 2 "10"
3 "10" 1 1 "1"

3๋ฒˆ์˜ ์ด์ง„ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋™์•ˆ 8๊ฐœ์˜ 0์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ, [3,8]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

"01110"์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์ฐจ ์ด์ง„ ๋ณ€ํ™˜ ์ด์ „ ์ œ๊ฑฐํ•  0์˜ ๊ฐœ์ˆ˜ 0 ์ œ๊ฑฐ ํ›„ ๊ธธ์ด ์ด์ง„ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ
1 "01110" 2 3 "11"
2 "11" 0 2 "10"
3 "10" 1 1 "1"

3๋ฒˆ์˜ ์ด์ง„ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋™์•ˆ 3๊ฐœ์˜ 0์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ, [3,3]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

"1111111"์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ์ด์ง„ ๋ณ€ํ™˜์„ ๊ฐ€ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์ฐจ ์ด์ง„ ๋ณ€ํ™˜ ์ด์ „ ์ œ๊ฑฐํ•  0์˜ ๊ฐœ์ˆ˜ 0 ์ œ๊ฑฐ ํ›„ ๊ธธ์ด ์ด์ง„ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ
1 "1111111" 0 7 "111"
2 "111" 0 3 "11"
3 "11" 0 2 "10"
4 "10" 1 1 "1"

4๋ฒˆ์˜ ์ด์ง„ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋™์•ˆ 1๊ฐœ์˜ 0์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ, [4,1]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

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

class Solution {
    public int[] solution(String s) {
        // [์ด์ง„ ๋ณ€ํ™˜ ํšŸ์ˆ˜, ์ œ๊ฑฐ๋œ 0์˜ ๊ฐœ์ˆ˜]
        int[] answer = new int[2];
        // ์ด์ง„ ๋ณ€ํ™˜ ํšŸ์ˆ˜ ์ €์žฅ
        int cnt = 0;
        
        // ๋ฌธ์ž์—ด์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while (!s.equals("1")) {
            // ํ˜„์žฌ ๋ฌธ์ž์—ด ๊ธธ์ด ์ €์žฅ
            int sLength = s.length();
            // 0์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด
            String replaceS = s.replace("0", "");
            
            // ๋‚จ์€ 1์˜ ๊ฐœ์ˆ˜
            int changeLength = replaceS.length();
            // ์ œ๊ฑฐ๋œ 0์˜ ๊ฐœ์ˆ˜ ์ถ”๊ฐ€
            answer[1] += sLength - changeLength;
            
            // ๋‚จ์€ 1์˜ ๊ฐœ์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋‹ค์‹œ s์— ์ €์žฅ
            s = Integer.toBinaryString(changeLength);
            
            // ๋ณ€ํ™˜ ํšŸ์ˆ˜ +1
            cnt++;
        }
        
        // ์ตœ์ข… ์ด์ง„ ๋ณ€ํ™˜ ํšŸ์ˆ˜ ์ €์žฅ
        answer[0] = cnt;
        
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}

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

0์„ ๋จผ์ € ์ œ๊ฑฐํ•œ๋‹ค. โ†’ ์ œ๊ฑฐํ•œ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.
๋‚จ์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ด์ง„ ๋ณ€ํ™˜ํ•œ๋‹ค
โ€œ1โ€์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต ์ง„ํ–‰ํ•œ๋‹ค.
์ด์ง„ ๋ณ€ํ™˜ ํšŸ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜ ํ•˜๋‚˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํšŸ์ˆ˜๋ฅผ ์ฒดํฌํ•œ๋‹ค.

์ถ”๊ฐ€ ํ’€์ด ๋ฐฉ๋ฒ•

class Solution {
    public int[] solution(String s) {
        // [์ด์ง„ ๋ณ€ํ™˜ ํšŸ์ˆ˜, ์ œ๊ฑฐ๋œ 0์˜ ๊ฐœ์ˆ˜]
        int[] answer = new int[2];
        
        // ๋ฌธ์ž์—ด์ด "1"์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while (!s.equals("1")) {
            // ํ˜„์žฌ ๋ฌธ์ž์—ด ๊ธธ์ด
            int sLength = s.length();
            // ๋ฌธ์ž์—ด์—์„œ "0" ์ œ๊ฑฐ
            String replaceS = s.replace("0", "");
            
            // ๋‚จ์•„์žˆ๋Š” "1"์˜ ๊ฐœ์ˆ˜
            int changeLength = replaceS.length();
            // ์ œ๊ฑฐ๋œ "0"์˜ ๊ฐœ์ˆ˜ ์ €์žฅ
            answer[1] += sLength - changeLength;
            
            // ๋‚จ์€ "1"์˜ ๊ฐœ์ˆ˜๋ฅผ ์ด์ง„ ๋ณ€ํ™˜
            s = Integer.toBinaryString(changeLength);
            
            // ์ด์ง„ ๋ณ€ํ™˜ ํšŸ์ˆ˜ +1
            answer[0]++;
        }
        
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}