기본적인 스택 활용 문제입니다.
처음에는 인풋으로 들어온 괄호문자들을 전부다 스택에 넣고
빼면서 어째저째 해볼랬는데 생각이 안나서 하나하나씩 봐주면서 넣고 빼고 했습니다.
import java.util.Scanner;
import java.util.Stack;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] left = {'(', '<', '{', '['};
char[] right = {')', '>', '}', ']'};
for(int test_case = 1; test_case <= 10; test_case++) {
int N = Integer.parseInt(sc.nextLine());
String temp = sc.nextLine();
Stack<Character> stack = new Stack<>();
int ans = 1;
outer:
for(int i = 0; i< N; i++) {
for(int j = 0; j < 4; j++) {
if(left[j] == temp.charAt(i)) { //괄호 시작하는거면 push
stack.push(left[j]);
break;
}
else if(right[j] == temp.charAt(i)) {
if(left[j] == stack.peek()) {
stack.pop();
break;
}else {
ans = 0;
break outer;
}
}
}
}
System.out.printf("#%d %d\n", test_case, ans);
}
}
}
문제에 달린 댓글을 보니 괄호 개수만 체크해도 정답이 떴다고 하네여. 하지만 제대로 풀어주려면 짝이 맞는지 확인해주어야 함미당.
괄호가 제대로 열고 닫히려면 stack
의 top
에 있는 여는 괄호 친구랑 다음번에 들어오는 닫는 괄호 친구가 짝짝꿍이 맞아야 합니다. 따라서 left
배열과 right
배열을 두고, 입력에 닫는 괄호가 나오면 top
에 있는 친구랑 짝짝꿍이 맞는지 확인하고 맞으면 빼고, 아니면 짝이 맞지 않는 것이기 때문에 고대로 가차없이 반복문에서 나와줍니다.
감사합니다^3^
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA-9229][DFS] 한빈이와 Spot Mart - Java (0) | 2020.08.03 |
---|---|
[SWEA-1223][스택] 계산기2 - Java (0) | 2020.08.02 |
[SWEA-1225][큐] 암호생성기 - Java (0) | 2020.07.30 |
[SWEA-1210] Ladder1 - Java (0) | 2020.07.28 |
[SWEA-1208] Flatten - Java (0) | 2020.07.28 |