๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿ—‚๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ๋ฌธ์ž์—ด ๋‚˜๋ˆ„๊ธฐ

by ์‚๋šค์˜ค๋ฆฌ 2025. 9. 26.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

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

programmers.co.kr

๋ฌธ์ž์—ด s๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ๋‹ค์Œ ๊ทœ์น™์„ ๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ ๋ฌธ์ž์—ด๋กœ ๋ถ„ํ•ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๋จผ์ € ์ฒซ ๊ธ€์ž๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์ž๋ฅผ x๋ผ๊ณ  ํ•ฉ์‹œ๋‹ค.
  • ์ด์ œ ์ด ๋ฌธ์ž์—ด์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฝ์–ด๋‚˜๊ฐ€๋ฉด์„œ, x์™€ x๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ธ€์ž๋“ค์ด ๋‚˜์˜จ ํšŸ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์…‰๋‹ˆ๋‹ค. ์ฒ˜์Œ์œผ๋กœ ๋‘ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์•„์ง€๋Š” ์ˆœ๊ฐ„ ๋ฉˆ์ถ”๊ณ , ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์€ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • s์—์„œ ๋ถ„๋ฆฌํ•œ ๋ฌธ์ž์—ด์„ ๋นผ๊ณ  ๋‚จ์€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์€ ๋ถ€๋ถ„์ด ์—†๋‹ค๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ๋‘ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ์—์„œ ๋” ์ด์ƒ ์ฝ์„ ๊ธ€์ž๊ฐ€ ์—†๋‹ค๋ฉด, ์—ญ์‹œ ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์€ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

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

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ s์˜ ๊ธธ์ด ≤ 10,000
  • s๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

s result
"banana" 3
"abracadabra" 6
"aaabbaccccabba" 3

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

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

  • s = "banana"์ธ ๊ฒฝ์šฐ ba - na - na์™€ ๊ฐ™์ด ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค.

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

  • s = "abracadabra"์ธ ๊ฒฝ์šฐ ab - ra - ca - da - br - a์™€ ๊ฐ™์ด ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค.

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

  • s = "aaabbaccccabba"์ธ ๊ฒฝ์šฐ aaabbacc - ccab - ba์™€ ๊ฐ™์ด ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค.

 

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

class Solution {
    public int solution(String s) {
        // ๋ถ„ํ•ดํ•œ ๋ฌธ์ž์—ด ๊ฐœ์ˆ˜
        int answer = 0;
        
        // ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์™€ ๊ฐ™์€ ๋ฌธ์ž ๊ฐœ์ˆ˜, ๋‹ค๋ฅธ ๋ฌธ์ž ๊ฐœ์ˆ˜
        int same = 0, diff = 0;
        // ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž
        char first = s.charAt(0);
        
        // ๋ฌธ์ž์—ด ํ™•์ธ
        for (int i = 0; i < s.length(); i++) {
            // ๋ฌธ์ž๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์™€ ๊ฐ™์„ ๊ฒฝ์šฐ same 1 ์ฆ๊ฐ€
            if (s.charAt(i) == first) {
                same++;
            } else {  // ์•„๋‹ ๊ฒฝ์šฐ diff 1 ์ฆ๊ฐ€
                diff++;
            }
            
            // same๊ณผ diff๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ
            if (same == diff) {
                // answer 1 ์ฆ๊ฐ€
                answer++;
                // ๋งŒ์•ฝ i+1์ด s์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
                if (i+1 < s.length()) {
                    // ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ i+1๋ฒˆ์งธ ๋ฌธ์ž๋กœ ์„ค์ •
                    first = s.charAt(i + 1);
                }
                // ์ดˆ๊ธฐํ™”
                same = 0;
                diff = 0;
            }
        }
        
        // same ๋˜๋Š” diff๊ฐ€ 0์ด ์•„๋‹ ๊ฒฝ์šฐ answer 1 ์ฆ๊ฐ€
        if (same != 0 || diff != 0) {
            answer++;
        }
        
        // ๋ถ„ํ•ดํ•œ ๋ฌธ์ž์—ด ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
        return answer;
    }
}

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

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ, ๋ฌธ์ž์—ด์„ ์ผ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‚˜๋ˆ„๋Š” ๋ฌธ์ œ๋ผ๋Š” ์ ์„ ํŒŒ์•…ํ–ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ž„์˜๋กœ ์ž˜๋ผ๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ฒซ ๊ธ€์ž์™€ ๊ฐ™์€ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜์™€ ๋‹ค๋ฅธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์•„์งˆ ๋•Œ ๋Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ substring์œผ๋กœ ์ž˜๋ผ์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ๋ฌธ์ž์—ด์„ ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ฐ™์€ ๊ธ€์ž์™€ ๋‹ค๋ฅธ ๊ธ€์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

์กฐ๊ฑด์„ ๋ถ„์„ํ•ด ๋ณด๋ฉด, ์ƒˆ๋กœ์šด ๊ตฌ๊ฐ„์ด ์‹œ์ž‘๋  ๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ ์ •ํ•ด์•ผ ํ•˜๊ณ , ์ดํ›„ ๋ฌธ์ž๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ธฐ์ค€ ๋ฌธ์ž์™€ ๊ฐ™์œผ๋ฉด same ์นด์šดํŠธ๋ฅผ, ๋‹ค๋ฅด๋ฉด diff ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ same๊ณผ diff๊ฐ€ ๊ฐ™์•„์ง€๋Š” ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ ๊ตฌ๊ฐ„์ด ์™„์„ฑ๋˜๋ฏ€๋กœ ๋ฌธ์ž์—ด์„ ๋Š๊ณ , ๊ทธ๋‹ค์Œ ๋ฌธ์ž๋ถ€ํ„ฐ ๋‹ค์‹œ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์„ ์„ธ์›Œ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋งŒ์•ฝ ํƒ์ƒ‰์ด ๋๋‚ฌ๋Š”๋ฐ same๊ณผ diff๊ฐ€ ์•„์ง ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ถ€๋ถ„๋„ ํ•˜๋‚˜์˜ ๊ตฌ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ , ํŠน์ • ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” charAt() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๊ฒฐ๊ตญ ์ „์ฒด ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ทœ์น™๋Œ€๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์œผ๋กœ ์ถฉ๋ถ„ํžˆ ํšจ์œจ์ ์ธ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.