728x90
1. 문제
2. 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class D4_1218_SW문제해결기본4일차_괄호짝짓기 {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> stack;
StringBuilder sb = new StringBuilder();
String pre = "([{<";
String post = ")]}>";
for (int tc = 1; tc <= 10; tc++) {
sb.append("#").append(tc).append(" ");
int len = Integer.parseInt(in.readLine());
String line = in.readLine();
stack = new Stack<>();
for (int i = 0; i < len; i++) {
char ch = line.charAt(i);
if (pre.indexOf(ch) >= 0) stack.push(ch);
else if (stack.empty()) {
stack.push('*'); // 체크위해서 넣어둠
break;
} else if (pre.indexOf(stack.peek()) == post.indexOf(ch)) stack.pop();
else break;
}
if (stack.empty()) sb.append("1\n");
else sb.append("0\n");
}
System.out.print(sb);
}
}
String의 indexOf를 활용해 현재 ch가 pre String에 포함된다면 스택에 push한다. 포함되지 않을 때의 리턴값이 -1임을 이용했다.
pre에 포함되지 않고 스택이 비어있다면 짝이 맞지 않는 입력값이므로 반복을 그만둔다.
peek의 pre인덱스값과 ch의 post인덱스값이 같아야만 pop시킨다.
그 외의 경우도 짝이 맞지 않는 입력값이므로 반복을 그만둔다.
이 문제들과 비슷하다.
2022.02.05 - [알고리즘/BOJ] - [BOJ] 9012 괄호 - JAVA
2022.02.05 - [알고리즘/BOJ] - [BOJ] 4949 균형잡힌 세상 - JAVA
3. 결과
if문 여러개로 좀 더럽게 풀었다가 String indexOf 방식을 알게되었다. 시간은 좀 느려졌지만 코드가 짧아지고 가독성이 좋아져서 만족스럽다!
'코딩테스트 > SWEA' 카테고리의 다른 글
[SWEA] 1224 계산기3 - JAVA (0) | 2022.02.09 |
---|---|
[SWEA] 1223 계산기2 - JAVA (0) | 2022.02.09 |
[SWEA] 1861 정사각형 방 - JAVA (0) | 2022.02.09 |
[SWEA] 3499 퍼펙트셔플 (0) | 2022.02.09 |
[SWEA] 5215 햄버거 다이어트 - JAVA (0) | 2022.02.07 |
댓글