https://www.acmicpc.net/problem/9012
import java.util.Scanner;
import java.util.Stack;
public class Main{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
// Stack 선언
Stack<Character> stack = new Stack<>();
int T = sc.nextInt(); // 테스트 케이스
for(int i=0; i<T; i++){
String str = sc.next(); // 문자열 입력
for(int j=0; j<str.length(); j++){ // 문자열을 문자로 접근 인덱스 0번부터
if(str.charAt(j)=='(') // 여는 괄호라면 스택에 push
stack.push(str.charAt(j));
else{ // 닫는 괄호라면?
if(stack.isEmpty()) { // 스택이 비어있으면
stack.push(str.charAt(j)); // 스택에 push
break;
}
else if(stack.peek()=='(') // 스택이 비어있지않고 맨 위가 여는 괄호라면
stack.pop(); // 짝이 지어지므로 여는괄호를 pop
else // 스택이 비어있지않고 맨 위가 닫는 괄호라면
stack.push(str.charAt(j)); // 스택에 push
}
}
if(stack.size()==0) // 위 과정 종료 후 스택이 비어있다면 성공
System.out.println("YES");
else // 아니면 실패
System.out.println("No");
stack.clear(); // 다음을 위해 스택 비우기
}
}
}
풀이 :
1. 여는 괄호라면 스택에 push 한다
2. 닫는 괄호일 때, 스택이 비어있다면 스택에 push -> 스택이 비어있지 않고 맨 위가 여는 괄호라면 여는 괄호를 pop -> 스택이 비어있지 않고 맨 위가 닫는 괄호라면 스택에 push
3. 위 과정 종료 후 스택이 비어있다면 "YES" 아니라면 "NO" 출력
'코딩테스트 > 백준' 카테고리의 다른 글
[백준-자바] 10773번 제로 / 2022.03.15 (0) | 2022.03.15 |
---|---|
[백준-자바] 4889번 안정적인 문자열 / 2022.03.10 (0) | 2022.03.10 |
[백준-자바] 2502번 떡 먹는 호랑이 / 2022.03.07 (0) | 2022.03.07 |
[백준-자바] 2217번 로프 / 2022.03.07 (0) | 2022.03.07 |
[백준-자바] 11047번 동전 0 / 2022.02.19 (0) | 2022.02.19 |