본문 바로가기

코딩테스트 연습(with java)/프로그래머스

프로그래머스<올바른 괄호>-2차-3차(수정완료22.09.16)

어제 밤에 계속 고민을 한 결과, "(" 모양이 여러번 나올 수도 있기 때문에 ")"와 대응할 수 있도록 짝을 맞춰주려면 queue가 아닌 Stack을 사용해야 할 것 같은 생각이 들었다 .

 

나의코드3차) 

import java.util.Stack;
import java.util.Arrays;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<String> stack = new Stack<>();
        char[] charArr = s.toCharArray();
        String[] arr = new String[charArr.length];
        for(int i = 0; i<charArr.length; i++){
            arr[i] = String.valueOf(charArr[i]);
        }
        for(int j=0; j<arr.length; j++){
            if(arr[j]=="("){
                stack.push("(");
            }
            else{
                if(stack.isEmpty()){
                    return false; 
                }
                else{
                    stack.pop();
                }
            }
        }
        if(!stack.isEmpty()){
            answer = false;
        }   
        else{
            answer = true;
        }
        return answer;
    }
}

하지만 계속 

 

 

전부 false가 나온다. 문제가 생겼다면 

 

else{ }안의 stack.isEmpty()가 오류를 발생시켰을 것 같다. 더 고민해보고 문제를 마무리 지을 수 있도록 해야겠다 . 

 

 

마지막 review 중 심각한 오점을 찾아내었다 

바로 문자열을 비교할 때, .equals를 사용하지 않은 것...

.equals를 사용하니 바로 해결되었다 

 

최종코드)

 

import java.util.Stack;
import java.util.Arrays;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<String> stack = new Stack<>();
        char[] charArr = s.toCharArray();
        String[] arr = new String[charArr.length];
        for(int i = 0; i<charArr.length; i++){
            arr[i] = String.valueOf(charArr[i]);
        }

        for(int j=0; j<arr.length; j++){
            if(arr[j].equals("(")){
                stack.add(arr[j]);
            }
            else{
                if(stack.size()==0){
                    answer=false;
                    return answer;

                }
                else{
                    stack.pop();
                }

            }
        }

        if(stack.size()>0){
            answer = false;
        }   
        else{
            answer = true;
        }






        return answer;
    }
}

이런 사소한 문법들을 실수하지 않도록 주의해야겠다.

 

통과!