본문 바로가기

Algorithm/SWEA

[SWEA-1218][스택] 괄호 짝짓기 - Java

기본적인 스택 활용 문제입니다.

처음에는 인풋으로 들어온 괄호문자들을 전부다 스택에 넣고

빼면서 어째저째 해볼랬는데 생각이 안나서 하나하나씩 봐주면서 넣고 빼고 했습니다.

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);
        }
    }
}

문제에 달린 댓글을 보니 괄호 개수만 체크해도 정답이 떴다고 하네여. 하지만 제대로 풀어주려면 짝이 맞는지 확인해주어야 함미당.

 

괄호가 제대로 열고 닫히려면 stacktop에 있는 여는 괄호 친구랑 다음번에 들어오는 닫는 괄호 친구가 짝짝꿍이 맞아야 합니다. 따라서 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