자바/코딩테스트

[프로그래머스] 괄호 회전하기 - Java(자바)

대전집주인 2024. 3. 26. 09:42
728x90
SMALL

 

문제 이해

  • (),{},[] 세종류의 괄호로 구성된 문자열이 존재하는데 문자열을 회전시켰을때 괄호가 올바른 괄호 문자열이 몇번인지 구하여라
  • 문자열 회전 문제는 "[](){}" + "[](){}" 이런식으로 두개의 문자열을 합하여 index 0부터 문자열 길이만큼 비교하고 index 값을 올려서 반복 비교한다.
  • 괄호의 완성은 "{()}" 이와 같이 괄호를 열었으면 제대로 닫아야 한다. "{(})" 이런 식의 괄호는 열고 닫았지만 닫는 순서가 잘못되었다.
  • 문자열의 값을 스택에 한문자씩 집어넣고 한문자씩 꺼내면서 "()", "{}","[]" 이와 같이 스택의 마지막값이 지금 문자열의 값의 열고 닫는 괄호가 맞는지 비교한다.
  • 스택에서 하나씩 꺼내 완성된 괄호가 모두 존재 하면 스택에는 아무런 값이 미존재 해야한다.
import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        String[] temp = (s + s).split("");
        
        for(int i = 0; i<s.length(); i++){
            Stack<String> stack = new Stack<>();
            for(int j = i; j<s.length()+i; j++){
                if(!stack.isEmpty()){
                    if((stack.peek().charAt(0) == '(' && temp[j].charAt(0) == ')')
                      || (stack.peek().charAt(0) == '{' && temp[j].charAt(0) == '}')
                      || (stack.peek().charAt(0) == '[' && temp[j].charAt(0) == ']')){
                        stack.pop();
                    }else{
                        stack.push(temp[j]);
                    }
                }else{
                    stack.push(temp[j]);
                }
            }
            
            if(stack.size() == 0){
                answer++;
            }
        }
        
        return answer;
    }
}
728x90
LIST