알고리즘/문제풀이 - 백준온라인저지
[BOJ 문자열] 괄호 9012.JAVA
나규태
2021. 7. 4. 22:06
문제 링크 : https://www.acmicpc.net/problem/9012
문제 등급 : Silver IV
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문제 해결 로직
- 문자열을 하나씩 Que에 넣는다.
- Que에 넣은 문자열과 앞으로 넣을 문자열을 비교하여 합이 맞는 괄호 인지 체크한다.
- 합이 맞는 괄호라면 que의 최상단 값을 제거한다.
- 합이 맞지 않는 괄호라면 que에 삽입한다.
- 문자열의 길이만큼 반복문이 다 돌고 que에 남아있는 문자가 있는지 확인하고 VPS인지 파악하여 결과를 출력한다.
이 문제는 타자 검정 같은 기본적인 문제이다. 지금 이 문제를 푸는 데에도 5분이 안 걸린 것 같다. 하지만 같은 유형의 문제가 기업 코딩 테스트에 나왔는데 결국 해결해내지 못했다. 응용이 안됬던 것일까? 긴장을 한 것일까?
푸념을 하며 나의 실수를 채찍질한다. 다음에는 이런 실수를 하지 않기를 빌며..
이 글을 보는 여러분들은 저와 같은 실수를 하지 않기를... 바랍니다.
아래와 같이 소스를 공유합니다.
public class 괄호 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++) {
String[] s = br.readLine().split("");
Queue<String> que = new LinkedList<>();
for (int j = 0; j < s.length; j++) {
if(que.isEmpty()) {
que.add(s[j]);
}else {
if(que.peek().equals("(") && s[j].equals(")")) {
que.poll();
}else {
que.add(s[j]);
}
}
}
if(que.isEmpty()) sb.append("YES").append("\n");
else sb.append("NO").append("\n");
}
System.out.println(sb.toString());
}
}