본문 바로가기
알고리즘 문제/백준

[백준] 9012번: 괄호

by Lpromotion 2024. 7. 11.

💡문제 분석 요약

입력으로 주어진 괄호 문자열이 VPS(올바른 괄호 문자열)인지 아닌지를 판별하는 문제이다.

  • 시간제한: 1초
  • 메모리 제한: 128MB

 

💡알고리즘 설계

  • 입력받은 괄호 문자열에서 문자 하나씩 검사한다.
    • ‘(’ 이면 스택에 push
    • ‘)’ 이면
      • 스택이 비어있을 경우 ‘)’를 push하고 반복문 중단.
      • 스택이 비어있지 않을 경우 pop.
  • 스택이 비어있으면 “YES”, 비어있지 않으면 “NO”를 결과에 추가한다.

 

💡코드

import java.io.*;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        while(n-- > 0) {
            String str = br.readLine();
            Stack<Character> stack = new Stack<>();
            for(char c : str.toCharArray()) {
                if(c == '(') stack.push(c);
                else {
                    if(stack.isEmpty()) {
                        stack.push(c); break;
                    }
                    else stack.pop();
                }
            }
            if(stack.isEmpty()) sb.append("YES").append("\\n");
            else sb.append("NO").append("\\n");
        }

        System.out.println(sb);
        br.close();
    }
}

 

💡시간복잡도

괄호 문자열 길이를 N이라고 할 때, 시간복잡도 O(N)이다.

 

💡 느낀점 or 기억할정보

toCharArray() 와 같이 문자열을 하나씩 나누는 방법을 매번 까먹어서 찾아보게 된다. 자주 사용하기 때문에 기억해두는 것이 좋을 것 같다.

반응형

'알고리즘 문제 > 백준' 카테고리의 다른 글

[백준] 1260번: DFS와 BFS  (2) 2024.07.16
[백준] 9093번: 단어 뒤집기  (1) 2024.07.16
[백준] 1966번: 프린터 큐  (0) 2024.07.12
[백준] 1158번: 요세푸스 문제  (0) 2024.07.10
[백준] 10828번: 스택  (0) 2024.07.10

댓글