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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ

 

programmers.co.kr

 

 

 

 

 

๊ด„ํ˜ธ ๋ฌธ์ œ๋Š” Stack์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•˜๋‹ค. ์ด์ „์— ๋ฐฑ์ค€์—์„œ ํ’€์–ด๋ณธ์ ์ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ๊ด„ํ˜ธ๊ฐ€ (, [, {๋กœ ์ข…๋ฅ˜๊ฐ€ ๋‹ค์–‘ํ•ด์„œ ๊ฐ ์ข…๋ฅ˜๋งˆ๋‹ค ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•ด์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ž˜ ๋”ฐ์ ธ์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ํŒ๋ณ„ํ•˜๊ธฐ ์ „์— ์ถ”๊ฐ€๋กœ ํšŒ์ „์ฒ˜๋ฆฌ๋„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

 

 

 

๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

1. ๋งค๋ฒˆ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ํšŒ์ „์„ ํ•˜๋Š” ํ•จ์ˆ˜ rotate(s) (x๊ฐ€ 1์ด์ƒ์ผ ๋•Œ)

-> 1~s.length๊นŒ์ง€ ๋ฌธ์ž๋“ค์„ ๊ฒฐํ•ฉํ•˜๊ณ , ๋’ค์— 0๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ๋ถ™์ธ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜. 

 

2. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ธ์ง€ ํŒ๋ณ€ํ•˜๋Š” ํ•จ์ˆ˜ isCorrect(s)

-> ์Šคํƒ์— ๋ฌธ์ž๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ์„œ ํŒ๋ณ„.

 

1) ๊ด„ํ˜ธ๊ฐ€ ์—ฌ๋Š” ๋ฌธ์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ, ์Šคํƒ์— push

 

2) ๋‹ซ๋Š” ๋ฌธ์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ

 2-1) ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ

  ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์—ฌ๋Š” ๋ฌธ์ž์ด๋ฉด, pop

  ์•„๋‹ˆ๋ฉด, false ๋ฐ˜ํ™˜

 2-2) ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด, false ๋ฐ˜ํ™˜.

 

์ถ”๊ฐ€) ์Šคํƒ์— ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋Š” ์ž‘์—…์ด ์ข…๋ฃŒ๋œ ํ›„, (์ด๊ฑฐ ์ฒ˜๋ฆฌ ์•ˆํ•ด์ฃผ๋ฉด 13๋ฒˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ํ†ต๊ณผ ๋ชปํ•จ)

- ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด true ๋ฐ˜ํ™˜

- ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด false ๋ฐ˜ํ™˜

 

 

 

13๋ฒˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค (from ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ•ด๋‹น ๋ฌธ์ œ ๊ฒŒ์‹œํŒ)

(

{{{{

 

 

 

 

 

์ฝ”๋“œ

import java.util.*;

class Solution {
  
    public int solution(String s) {
        int answer = 0;
        
        for(int i = 0; i < s.length(); i++) { //๋ฌธ์ž ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต
            if(i >= 1) {
                s = rotate(s); //์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ
            }
            
            if(isCorrect(s)) {
                answer++;
            }
        }
        
        return answer;
    }
    
    public String rotate(String s) {
        String newStr = "";
        
        for(int i = 1; i < s.length(); i++) {
            char ch = s.charAt(i);
            newStr += Character.toString(ch);
        }
        
        char ch = s.charAt(0);
        newStr += Character.toString(ch);
        
        return newStr;
    }
    
    public boolean isCorrect(String s) {
        Stack<Character> stack = new Stack<>();
        
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            
            if(ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else { // ), ], }
                if(!stack.isEmpty()) {
                    if(ch == ')') {
                        if(stack.peek() == '(') {
                            stack.pop();
                        } else {
                            return false;
                        }
                    }
                
                    if(ch == ']') {
                        if(stack.peek() == '[') {
                            stack.pop();
                        } else {
                            return false;
                        }
                    }
                
                    if(ch == '}') {
                        if(stack.peek() == '{') {
                            stack.pop();
                        } else {
                            return false;
                        }
                    }
                } else {
                    return false;
                }
                
            }
        }
        
        if(stack.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }
}

 

 

 

 

 

๊ฒฐ๊ณผ

 

giraffe_