happy coding
[java] 9012. 괄호 본문
괄호 문제, 사실 프로그래밍언어론 과제에서 봤던 문제와 매우 유사했다. 조금 더 빨리 코테 준비를 했다면 조금 더 편하게 할 수 있지 않았을까. 그때 도움 줬던 친구들에게 고마움을 전하고 싶다 :)
일단 이 문제는, 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();
}
- Stack<Character> stack = new Stack<>();: 문자열의 괄호 매칭을 확인하기 위한 스택을 생성합니다.
- for (char c : s.toCharArray()) {: 주어진 문자열 s를 문자 하나씩 순회합니다.
- if (c == '(') {: 현재 문자 c가 '(' 괄호인 경우입니다. 스택에 '(' 괄호를 추가하여 나중에 ')' 괄호와 매칭 여부를 확인할 수 있도록 준비합니다.
- else if (c == ')') {: 현재 문자 c가 ')' 괄호인 경우입니다. 스택이 비어있지 않고, 스택의 top에 있는 값이 '(' 괄호라면 매칭된 것으로 간주하고 해당 '(' 괄호를 스택에서 제거합니다.
- 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