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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - (Level2)์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ

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

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

 

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

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

programmers.co.kr

์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<Character>();
        
        if(s.charAt(0) == ')')
            return false;

        for(int i=0; i<s.length(); i++){
            if(!stack.isEmpty() && s.charAt(i) == ')'){
                stack.pop();
            }
            else{
                stack.push(s.charAt(i));
            }
        }
        // ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด ๋ชจ๋“  ๊ด„ํ˜ธ๊ฐ€ ์ง์ง€์–ด ์กŒ์œผ๋ฏ€๋กœ true, ์•„๋‹๊ฒฝ์šฐ false
        answer = (stack.isEmpty()) ? true : false;
        return answer;
    }
}

ํ’€์ด

์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ ๊ณ„์† ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ์‹คํŒจํ–ˆ๋‹ค.(์‹œ๊ฐ„ ์ดˆ๊ณผ)

๋งŒ์•ฝ ๋ฌธ์ž์—ด์˜ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ')' ์ด๋ฉด ๋’ค๋Š” ๋ณผ ํ•„์š”๋„ ์—†์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์ด๋ฏ€๋กœ false๋ฅผ returnํ•ด์ค€๋‹ค.

๊ทธ ์ดํ›„์—๋Š” '(' ์™€ ')'์„ ๊ฐ€์ง€๊ณ  push๋‚˜ pop๋งŒ ํ•ด์ค€๋‹ค.

์Šคํƒ์—๋Š” ํ•ญ์ƒ '(' ๋งŒ ๋„ฃ๊ณ , ')' ๊ฐ€ ์˜ฌ๊ฒฝ์šฐ ์Šคํƒ์— ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ํŒ๋‹จํ•˜๋Š”๋ฐ,

๋งŒ์•ฝ ํ˜„์žฌ ์Šคํƒ์˜ ๊ฐ’์ด ๋น„์–ด์žˆ์ง€ ์•Š๊ณ , ')' ๊ฐ€ ์™”์„๊ฒฝ์šฐ -> pop()์„ ํ•ด์ฃผ๊ณ ,

๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ '(' ๊ฐ€ ์™”์„๊ฒฝ์šฐ ์Šคํƒ์— ๋„ฃ์–ด์ค€๋‹ค -> push()

๋งˆ์ง€๋ง‰์œผ๋กœ, ์Šคํƒ์— ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋ชจ๋“  ๊ด„ํ˜ธ๊ฐ€ ์•Œ๋งž๊ฒŒ ์ง์ง€์–ด์„œ ์ œ๊ฑฐ๋œ ์˜ฌ๋ฐ”๋ฅธ๊ด„ํ˜ธ์ด๋ฏ€๋กœ true,

์Šคํƒ์— ๊ฐ’์ด ์žˆ๋Š”๊ฒฝ์šฐ ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฏ€๋กœ false๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

 

ํ†ต๊ณผ๋œ ์ฝ”๋“œ

 

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<Character>();

        for(int i=0; i<s.length(); i++){
                if(s.charAt(i) == '(')  // ํ˜„์žฌ (๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ๋ฉด ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
                    stack.push('(');
                else{
                    if(stack.isEmpty()) // ํ˜„์žฌ )๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์ธ๋ฐ ์Šคํƒ์ด ๋น„์–ด์žˆ์„๊ฒฝ์šฐ -> false
                        return false;
                    else
                        stack.pop();    // ํ˜„์žฌ )๊ฐ€ ๋“ค์–ด๊ฐˆ ์ƒํƒœ์—์„œ ์Šคํƒ์— ๊ด„ํ˜ธ('(')๊ฐ€ ์žˆ๋Š”๊ฒฝ์šฐ -> pop
                }
        }
        answer = (stack.isEmpty()) ? true : false;
        return answer;
    }
}

for๋ฌธ ์•ˆ์˜ ์กฐ๊ฑด์„ ์ด๊ฒƒ์ €๊ฒƒ ๋ฐ”๊พธ๋ฉด์„œ ์ œ์ถœํ–ˆ๋”๋‹ˆ ์ด ์ฝ”๋“œ๋Š” ํ†ต๊ณผ๊ฐ€ ๋๋‹ค.

์ฒ˜์Œ ๊ธฐ์ค€์„ stack์ด ๋น„์–ด์žˆ๋Š”์ง€๊ฐ€ ์•„๋‹Œ '(' ์™€ ')'๋กœ ์žก์•„์„œ ํ†ต๊ณผ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.. (์‚ฌ์‹ค ์ž˜ ๋ชจ๋ฅด๊ฒ ๋”ฐ)

 

 

์œ ์‚ฌ ๋ฌธ์ œ

๋ฐฑ์ค€ 3986 ์ข‹์€๋‹จ์–ด

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

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€