코딩테스트

[프로그래머스] 올바른 괄호_12909

라임온조 2023. 7. 6. 18:21

문제 및 코드

 

GitHub - Lee-Min-Jung/coding_test_practice

Contribute to Lee-Min-Jung/coding_test_practice development by creating an account on GitHub.

github.com

회고

  • 괄호 검사면 스택이지 하고 스택으로 풀기 시작했다. 스택으로 분류된 걸 알고 있어서 뭐 당연...
  • 맨 처음에 푼 풀이는 String 배열을 만들어서 풀었는데 정확성은 다 맞았지만 효율성에서 틀렸다. 그래서 좀 살펴보니 String 말고 Character로 풀면 된다는 말이 있어서 그렇게 푸니 효율성도 통과했다. 주어진 string을 char배열로 만들어서 해당 배열을 도는 것.
  • 맨 처음 풀이는 아래와 같다
// s를 돈다
    // 여는 괄호면 스택에 넣는다
    // 닫는 괄호면 스택에서 pop 하면서 여는 괄호인지 확인한다
        // 만약 여는 괄호 아니면 바로 올바르지 않은 거니까 멈추기
    // 다 하고 나서 스택 비어있지 않으면 올바르지 않은 것


import java.util.*;

class Solution {
    boolean solution(String s) {
        String[] sArr = s.split("");
        Stack<String> st = new Stack<String>();
        
        // s 돌기
        for(String str : sArr){
            // 여는 괄호면 스택에 넣기
            if(str.equals("(")){
                st.push(str);
                continue;
            }
            // 닫는 괄호면 스택에서 pop하면서 여는 괄호 나오는지 확인
            if(str.equals(")")){
                if(!st.isEmpty() && st.pop().equals("(")){
                    continue;
                }else{
                    return false;
                }
            }
            
        }
        // 마지막에 스택 확인
        if(!st.isEmpty()){
            return false;
        }
        return true;
    }
}

 

기억

  • String 메서드 중 toCharArray는 문자열을 단순히 문자 배열로 변경하는 것. 보통 O(N)
  • String 메서드 중 split("")은 정규표현식을 해석해야하기 때문에 toCharArray보다 더 많은 작업이 수행된다. 따라서 O(N)이긴 하지만 시간이 더 걸린다. 

 

체크

풀이 횟수 시간 정답 여부 참고 여부
1 40분   O