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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

넣고 뺴기 쉬운 ArrayList로 진행. remove(0), add(arr.length()-1);

Stack에 "(" "[" "{" 이면 넣고 만약 "),},}" 라면 스택에서 뺏을때 해당값과 쌍이 아니라면 답이 아닌 경우로 cnt를 증가시키지 않습니다.

 

기억해야할점

첫번쨰, 괄호 문자열이 홀수일경우 모든 경우를 조사해도 올바른 괄호 문자열이 아니며, ( s.length() / 2 ) 로 진행해도 값이 나누어떨어지지않으면서 맞는것으로 나올때가 있습니다.

테스트케이스 12, 13 에서 시간초과가 걸렸는데

괄호 문자열이 만약 

"()("
'("
"{{{{{{"

 

"()(" 일경우 길이가 3 이기에 나누면 1. 일때 () 가 한개 있으므로 1로 나와 답으로 측정되는 경우가 있습니다. 

'(" 또한 나누면  0 이기에 cnt가 0 이면 맞는 결과가 있습니다.

 

그러므로 문자열 길이가 홀수면 바로 중단해야합니다.

 

 

 

 

코드입니다.


import java.util.*;
class Solution {
    ArrayList<Character> arr = new ArrayList<>();
    public int solution(String s) {
        for(int i=0;i<s.length();i++){
            arr.add(s.charAt(i));
        }

                
        int answer = 0;
        //길이만큼 회전.
        if(s.length() % 2 == 1)
            return 0;
        
        for(int i=0; i<s.length();i++){
            Stack<Character> stack = new Stack<Character>();
            
            // for(char a : arr){
            //     System.out.print(" "+a);
            // }
            // System.out.println();
            
            int cnt = 0;
            //검사한뒤 
            for(int j=0;j<s.length();j++){
                
                if(arr.get(j) == '('){
                    stack.push(arr.get(j));
                }else if(arr.get(j) == '['){
                    stack.push(arr.get(j));
                }else if(arr.get(j) == '{'){
                    stack.push(arr.get(j));
                }
                
                else if(arr.get(j) == ')'){
                    if(stack.isEmpty()) break;
                    if(stack.pop() == '(') cnt += 1;
                }else if(arr.get(j) == ']'){
                    if(stack.isEmpty()) break;
                    if(stack.pop() == '[') cnt += 1;
                }else if(arr.get(j) == '}'){
                    if(stack.isEmpty()) break;
                    if(stack.pop() == '{') cnt += 1;
                }
                
            }
            
            if(cnt == s.length() / 2) answer += 1;
            // System.out.println(cnt);
            //회전
            Character temp = arr.remove(0);
            arr.add(arr.size(),temp);
            
        }
        return answer;
    }
    
}

+ Recent posts