https://www.acmicpc.net/problem/9012
문제바로가기
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
1. 접근방법
1. 괄호에 짝이 맞으면 가능하겠구나 생각함
2. 그래서 여는괄호 닫는괄호수를 새서 같으면 YES해주려고하니
순서가 )))((( 이면 틀린 것이기 때문에 이방법으로는 불가능
3. 그래서 스택을 통해서 (나오면 스택에 넣고 ) 나오면 pop해주는 방식으로 구현해야겠다라고 생각함
구현시간 5분
2. 실수한 부분
1. )나오면 pop해줄때 st이 비어있으면 바로 NO해주고 끝냈는데 st안에 (가 하나라도 잇으면 맞지않는 상황이 연출
그래서 마지막 스택이 비어있는지 한번더 확인후 있으면 NO 없으면 YES
2. 마지막으로는 한번 남아있고 스택을 비워주지않으면 다음 경우에 관여를 하기때문에 clear();를 사용해야했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Stack<Character> st = new Stack<>();
for(int k=0;k<n;k++) {
String temp = br.readLine();
int size = temp.length();
boolean check = false;
for(int i=0;i<size;i++) {
if(temp.charAt(i)=='(') {
st.add('(');
}else if(temp.charAt(i)==')') {
if(st.isEmpty()) {
check = true;
break;
}else {
st.pop();
}
}
}
if(check) sb.append("NO").append("\n");
else {
if(st.isEmpty()) sb.append("YES").append("\n");
else sb.append("NO").append("\n");
}
st.clear();
}
sb.setLength(sb.length()-1);
bw.write(sb.toString());
bw.flush();
}
}
간단하게 어떤 방식을 쓰냐에 따라 난이도가 달라질거 같다.
'acmicpc > Java' 카테고리의 다른 글
[Java] 백준 1613 역사 (0) | 2022.04.11 |
---|---|
[Java] 백준 1003 피보나치 함수 (0) | 2022.04.11 |
[Java] 백준 19236 청소년 상어 (0) | 2022.04.07 |
[JAVA] 백준 11559 뿌요뿌요 Puyo Puyo (0) | 2022.04.06 |
[JAVA] 백준 12100번 2048 (Easy) (0) | 2022.03.31 |
댓글