SMALL
1. 문제링크
2. 문제 접근
괄호 문자열에 대한 개념에 대해 이해해야한다. 어렵게 생각할 필요가 전혀 없다. VPS는 괄호의 쌍이 일치하면 되는 것이다. 문제에서 예를 든 것처럼 (())()이나 ((())) 처럼 각자의 괄호 쌍이 일치하면 되는 것으로 이해하면 된다. 그 반대인 경우에는 VPS가 아니므로 NO를 출력하면 된다.
3. 문제 풀이
우선 scanner와 stack으로 푸는 방법, bufferedreader와 stack으로 푸는 방법이 있는데, 더 작동시간이 빠른 것은 bufferedreader다. 따라서 bufferedreader의 방법으로 풀어보았다.
// 스택구조 생성을 위해 필요한 모듈
import java.util.Stack;
import java.io.BufferedReader;
import java.io.InputStreamReader;
// 예외처리를 위해 필요한 모듈
import java.io.IOException;
public class Test01 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 문자열로 받은 값을 10진수의 정수형으로 반환해서 T에 저장
int T = Integer.parseInt(br.readLine());
// T번 만큼 YES 또는 NO를 판별하는 클래스로 괄호 묶음을 넘긴다.
for(int i = 0; i < T; i++) {
System.out.println(yesOrNo(br.readLine()));
}
}
public static String yesOrNo(String s) {
// 문자를 담을 수 있는 스택을 선언한다.
Stack<Character> stack = new Stack<>();
// 괄호의 숫자만큼 반복한다.
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//열린 괄호인 경우 아직 판단할 수 없으므로 스택에 push한다.
if(c == '(') {
stack.push(c);
}else if(stack.empty()) {
// 이 경우는 스택에 아무것도 없는데 닫힌 괄호가 들어온 경우이다.
// 그럴 경우 어떤 값이 들어와도 VPS가 성립하지 않기에 NO를 return한다.
return "NO";
}else {
// 이 경우는 스택에 요소가 하나 이상 있으며, 닫힌 괄호가 들어온 경우이므로, pop을 해준다.
stack.pop();
}
}
// 괄호의 숫자만큼 반복이 다 끝났음에도 스택에 요소가 있으면 NO이지만,
// 아무것도 없으면 YES이다.
if (stack.empty()) {
return "YES";
}
else {
return "NO";
}
}
}
LIST
'BOJ' 카테고리의 다른 글
2023 KAKAO BLIND RECRUITMENT : 개인정보 수집 유효기간 (0) | 2023.11.08 |
---|---|
BOJ 1157번 단어공부 파이썬 (0) | 2022.03.17 |
BOJ 17608번 막대기 (0) | 2022.01.13 |
백준 2884번 알람시계 파이썬 (0) | 2022.01.13 |
BOJ 1110번 더하기 사이클 파이썬 (0) | 2022.01.12 |