풀이방법
사용된 것:
스택
2022.03.02
boolean 형 변수 v를 사용한다.
해당 문자열이 올바른 괄호 문자열이면 v 를 true로, 그렇지 않으면 false로 설정할 것이다.
v의 초기값은 true이다.
반복문 내에서, 주어진 문자열을 가장 앞 글자부터 한 글자씩 다룬다.
이번 문자가 '(' 라면 스택에 넣는다.
이번 문자가 ')' 라면,
현재 스택에 '(' 가 하나 이상 들어있을 경우 '(' 하나를 pop 한다.
현재 스택이 비어있다면 이 문자열은 올바른 괄호 문자열이 아니다. v의 값을 false로 바꾸고 반복문을 종료한다.
중단 없이 문자열의 마지막 글자까지 처리를 마쳤다면,
이 때 스택이 비어있으면 이 문자열은 올바른 괄호 문자열이다.
이 때 스택에 '(' 가 하나 이상 남아있다면 이 문자열에는 ')' 보다 '(' 가 더 많으므로 올바른 괄호 문자열이 아니다. v의 값을 false로 바꾼다.
v의 값이 초기값 그대로 true라면 YES를, false로 바뀌어있다면 NO를 화면에 출력한다.
코드
Java(2022.03.02)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
static Stack<Character> stack;
static String input;
static char[] arr;
static int n;
static boolean v;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
for(int i = 0; i<n; i++) {
stack = new Stack<>();
v = true;
input = br.readLine();
arr = input.toCharArray();
for(char c : arr) {
if(c == '(') {
stack.add(c);
}
else {
if(stack.isEmpty()) {
v = false;
break;
}
else stack.pop();
}
}
if(!stack.isEmpty()) {
v = false;
}
if(v) System.out.println("YES");
else System.out.println("NO");
}
}
}
Java(2022.03.15, E-PPER 제출을 위한 solution 함수 형식)
public static String[] solution(int T, String[] inputs) {
String answer[] = new String[T];
for(int i = 0; i<T; i++) {
Stack<Character> stack = new Stack<>();
boolean v = true;
String input = inputs[i];
char[] arr = input.toCharArray();
for(char c : arr) {
if(c == '(') {
stack.add(c);
}
else {
if(stack.isEmpty()) {
v = false;
break;
}
else stack.pop();
}
}
if(!stack.isEmpty()) {
v = false;
}
if(v) answer[i] = "YES";
else answer[i] = "NO";
}
return answer;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#3190 : 뱀 (0) | 2022.03.02 |
---|---|
#2607 : 비슷한 단어 (0) | 2022.03.02 |
#2231 : 분해합 (0) | 2022.03.02 |
#9237 : 이장님 초대 (0) | 2022.02.24 |
#20921 : 그렇고 그런 사이 (0) | 2022.02.24 |