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

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

by carrot0911 2025. 4. 18.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

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

programmers.co.kr

์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๋Š”, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ฌธ์ž์—ด์—์„œ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด 2๊ฐœ ๋ถ™์–ด ์žˆ๋Š” ์ง์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ทธ๋‹ค์Œ, ๊ทธ ๋‘˜์„ ์ œ๊ฑฐํ•œ ๋’ค, ์•ž๋’ค๋กœ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค๋ฉด ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด 1์„, ์•„๋‹ ๊ฒฝ์šฐ 0์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด S = baabaa ๋ผ๋ฉด

b aa baa → bb aa → aa 

์˜ ์ˆœ์„œ๋กœ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ

  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด : 1,000,000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ๋ฌธ์ž์—ด์€ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

s result
baabaa 1
cdcd 0

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

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

  • ์œ„์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

  • ๋ฌธ์ž์—ด์ด ๋‚จ์•„์žˆ์ง€๋งŒ ์ง์ง€์–ด ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

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

import java.util.*;

class Solution{
    public int solution(String s){
        int answer = -1;

        // ์˜ˆ์™ธ์ฒ˜๋ฆฌ: ๊ธธ์ด๊ฐ€ 1์ด๋ฉด ์ ˆ๋Œ€ ์ง์„ ์ด๋ฃฐ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ 0 ๋ฐ˜ํ™˜
        if (s.length() == 1) {
            return 0;
        }
        
        // ๋ฌธ์ž ๋น„๊ต๋ฅผ ์œ„ํ•œ ์Šคํƒ ์ƒ์„ฑ
        Stack<Character> stack = new Stack<>();
        
        // ๋ฌธ์ž์—ด์„ ํ•œ ๊ธ€์ž์”ฉ ์ˆœํšŒ
        for (char c : s.toCharArray()) {
            // ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๊ณ , ํ˜„์žฌ ๋ฌธ์ž์™€ ์Šคํƒ ๋งจ ์œ„ ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด
            if (!stack.isEmpty() && c == stack.peek()) {
                // ์ œ๊ฑฐ
                stack.pop();
            } else {
                // ์Šคํƒ์— ์ถ”๊ฐ€
                stack.push(c);
            }
        }

        // ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์ง์„ ์ด๋ฃจ์–ด ์ œ๊ฑฐ๋˜์—ˆ๋‹ค๋ฉด
        if (stack.size() == 0) {
            // answer์— 1 ์ €์žฅ
            answer = 1;
        } else {
            // ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด answer์— 0 ์ €์žฅ
            answer = 0;
        }
        
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}

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

ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๋ฌธ์ž์—ด๊ณผ ๊ทธ ๋‹ค์Œ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•ด์„œ ๊ฐ™๋‹ค๋ฉด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ์ œ๊ฑฐํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
๊ทธ๋ ‡๋‹ค๋ฉด ๋ฒ”์œ„๋Š” ์–ด๋–ป๊ฒŒ ์žก์•„์•ผ ํ•˜์ง€..? ์‚ญ์ œ ๋˜๋ฉด ๊ธธ์ด๊ฐ€ ์ ์  ์ค„์–ด๋“œ๋Š”๋ฐ..
๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ผ ๊ฒฝ์šฐ ๋ฐ”๋กœ ์Šคํƒ‘ํ•˜๋ฉด ๋œ๋‹ค.

์Šคํƒ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค. ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๋ฐฉํ–ฅ์ด ํ‹€๋ ค์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ๋ฐฉํ–ฅ์„ ์ •ํ•˜๊ณ  ํ’€์—ˆ๋‹ค..