문제링크
https://www.acmicpc.net/problem/9012
접근한 방법
- 문자열과 스택을 사용
풀이방법
- 여는 괄호를 만나면 stack에 push
- 닫는 괄호를 만났을 때
- stack에 여는 괄호가 존재한다면 stack의 값을 pop
- 여는 괄호가 없다면 실패처리
- 마지막으로 모든 탐색을 끝냈는데 stack에 남아있다면 실패처리
소스코드 작성 방법
- 스택과 성공 여부를 판단하는 변수 선언
- charAt으로 차례로 각 문자를 탐색 (String.valueOf()로 한번 감싸서 String으로 처리해주었다.)
- .equals()로 문자열 비교하여 앞서 풀이방법에서 이야기했던 로직을 수행한다.
소스코드
package baekjoon.stack;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Q_9012_PS {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
for (int i = 0; i < num; i++) {
String str = br.readLine();
Stack<String> stack = new Stack();
boolean isVPS = true;
for (int j = 0; j < str.length(); j++) {
String c = String.valueOf(str.charAt(j));
// 여는 괄호이면 stack에 push
if(c.equals("("))
stack.push(c);
else if(c.equals(")")) {
if(!stack.empty()){
// stack에 여는 괄호가 존재한다면 stack의 값을 pop
stack.pop();
} else {
// 여는 괄호가 없는데 닫힌 괄호가 나왔으면 false
isVPS = false;
break;
}
}
}
if(!stack.isEmpty())
isVPS = false;
if(isVPS)
System.out.println("YES");
else
System.out.println("NO");
}
}
}
반응형
'자료구조&알고리즘 > 스택' 카테고리의 다른 글
[백준] 문자열, 스택 - 4949번 균형잡힌 세상(Java) (0) | 2022.05.20 |
---|
댓글