Coding - Algo/Java
[SWEA] 1218번:괄호 짝짓기 (Java 자바)
jainn
2021. 8. 5. 13:10
728x90
문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이 및 소스코드
불필요한 반복을 위해서 닫고 열리는 괄호를 각각 맞는 위치에 String을 하나씩 만들어주었다.
만약에 open에 해당하는 괄호가 나오면 스택에 push 해주었고,
close에 해당하는 괄호가 나오면 스택에서 pop해주어 맞는 괄호인지 확인해주었다.
확인하는 방법은
스택에서 pop한 open 괄호의 인덱스와 현재의 close 괄호의 인덱스가 맞다면 올바른 괄호고,
다르다면 올바르지 않은 괄호이므로 flg = 0; 해서 break 해주면 된다.
import java.io.*;
import java.util.Stack;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String open = "([{<";
String close = ")]}>";
for(int t=1;t<=10;t++) {
Stack<Character> stack = new Stack<>();
int n=Integer.parseInt(br.readLine());
String tc = br.readLine();
int flg = 1;
for(int i=0;i<n;i++) {
if(open.contains(Character.toString(tc.charAt(i)))) {
stack.push(tc.charAt(i));
}
else if(close.contains(Character.toString(tc.charAt(i)))){
if(stack.empty()) {
flg = 0;
break;
}
int idx = close.indexOf(Character.toString(tc.charAt(i)));
char tmp = stack.pop(); //비어있지 않으므로 꺼낼 수 있다.
if (tmp != open.charAt(idx)) {
flg = 0;
break;
}
}
}
if(!stack.empty())
flg = 0;
sb.append("#"+t+" "+flg+"\n");
}
System.out.println(sb);
}
}
반응형