9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
풀이 과정
괄호 검사 알고리즘
- 문자열에 있는 괄호를 차례대로 조사하면서 왼쪽 괄호를 만나면 stack에 push
- 오른쪽 괄호를 만나면 stack의 top과 괄호의 짝이 맞는지 비교
- 짝이 맞는 경우 stack에서 pop을 수행하고 위의 조사 반복
- 짝이 맞지 않거나 stack이 비어 있는 경우 False
- 문자열을 전부 검사한 후 stack이 비어있으면 True
- 만약 괄호가 남아있다면 False
정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
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 s = br.readLine();
//각 테스트 케이스마다 새로운 스택 생성
Stack<Character> stack = new Stack<Character>();
boolean check = true;
for(int j=0; j<s.length(); j++)
{
if(s.charAt(j)=='(') //왼쪽 괄호를 만났을 경우 푸시
{
stack.push(s.charAt(j));
}
else if(stack.isEmpty()) //오른쪽 괄호를 만났는데 스택이 비어있는 경우
{
check=false;
}
else //오른쪽 괄호를 만났을 때 짝이 맞는 경우
{
stack.pop();
}
}
//모든 문자열 검사를 마쳤는데 스택에 남은 왼쪽 괄호가 있을 경우 NO
if(!stack.isEmpty())
{
check=false;
}
if(check)
System.out.println("YES");
else
System.out.println("NO");
}
}
}
'Java > 백준' 카테고리의 다른 글
[JAVA] 백준 12789 도키도키 간식드리미 (1) | 2024.02.10 |
---|---|
[JAVA] 백준 4949 균형잡힌 세상 (2) | 2024.02.08 |
[JAVA] 백준 10773 제로 (0) | 2024.02.08 |
[JAVA] 백준 28278 스택 2 (0) | 2024.02.08 |
[JAVA] 백준 18870 좌표 압축 (1) | 2024.02.07 |