happy coding

[java] 9012. 괄호 본문

coding study/baekjoon

[java] 9012. 괄호

yeoonii 2023. 8. 15. 18:05

괄호 문제, 사실 프로그래밍언어론 과제에서 봤던 문제와 매우 유사했다. 조금 더 빨리 코테 준비를 했다면 조금 더 편하게 할 수 있지 않았을까. 그때 도움 줬던 친구들에게 고마움을 전하고 싶다 :)

 

일단 이 문제는, testCase라는 배열에 입력받은 괄호의 짝이 맞다면 YES, 아니라면 NO를 저장하도록 하는 문제이다. 이번에는 메소드를 하나 선언해서 해결해보았다.

 

 

public static boolean isBalanced(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (stack.isEmpty() || stack.pop() != '(') {
                    return false;
                }
            }
        }

        return stack.isEmpty();
    }
  1. Stack<Character> stack = new Stack<>();: 문자열의 괄호 매칭을 확인하기 위한 스택을 생성합니다.
  2. for (char c : s.toCharArray()) {: 주어진 문자열 s를 문자 하나씩 순회합니다.
  3. if (c == '(') {: 현재 문자 c가 '(' 괄호인 경우입니다. 스택에 '(' 괄호를 추가하여 나중에 ')' 괄호와 매칭 여부를 확인할 수 있도록 준비합니다.
  4. else if (c == ')') {: 현재 문자 c가 ')' 괄호인 경우입니다. 스택이 비어있지 않고, 스택의 top에 있는 값이 '(' 괄호라면 매칭된 것으로 간주하고 해당 '(' 괄호를 스택에서 제거합니다.
  5. return stack.isEmpty();: 모든 문자를 순회한 뒤에도 스택이 비어있다면 모든 '(' 괄호에 대응되는 ')' 괄호가 있다는 의미이므로 true를 반환합니다. 만약 스택에 '(' 괄호가 남아있다면 괄호 매칭이 제대로 이루어지지 않았으므로 false를 반환합니다.
import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        String[] testCase = new String[N];

        for (int i = 0; i < N; i++) {
            String input = br.readLine();
            if (isBalanced(input)) {
                testCase[i] = "YES";
            } else {
                testCase[i] = "NO";
            }
        }

        for (int i = 0; i < N; i++) {
            System.out.println(testCase[i]);
        }
    }

    public static boolean isBalanced(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (stack.isEmpty() || stack.pop() != '(') {
                    return false;
                }
            }
        }

        return stack.isEmpty();
    }
}

'coding study > baekjoon' 카테고리의 다른 글

[java] 1874. 스택 수열  (0) 2023.08.16
[java] 4949. 균형잡힌 세상  (0) 2023.08.15
[java] 10828. 스택  (0) 2023.08.15
[java] 10773. 제로  (0) 2023.08.15
[java] 1920. 수 찾기  (0) 2023.08.13
Comments