본문 바로가기
온라인 저지/SWEA

[SWEA/Java] 1218 괄호 짝짓기

by ahj 2022. 2. 9.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class Solution {
	static int caseLength;
	static Stack<String> stack;
	static String[] eachCase;

	public static void main(String[] args) throws Exception {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

		int T = 10, ans;
		for (int tc = 1; tc <= T; tc++) {
			stack = new Stack<String>();
			caseLength = Integer.parseInt(in.readLine());
			eachCase = in.readLine().split("");
			ans = pairing();

			System.out.println("#" + tc + " " + ans);
		}
	}

	private static int pairing() {
		for (int i = 0; i < caseLength; i++) {
			switch (eachCase[i]) {
			case "(":
			case "{":
			case "[":
			case "<":
				stack.push(eachCase[i]);
				break;
			case ")":
				if (stack.empty())
					return 0;
				if (!stack.pop().equals("("))
					return 0;
				break;
			case "}":
				if (stack.empty())
					return 0;
				if (!stack.pop().equals("{"))
					return 0;
				break;
			case "]":
				if (stack.empty())
					return 0;
				if (!stack.pop().equals("["))
					return 0;
				break;
			case ">":
				if (stack.empty())
					return 0;
				if (!stack.pop().equals("<"))
					return 0;
				break;
			}
		}
		return 1;
	}
}

금일 학습한 Stack을 이용해 해결해주는 문제.
닫는 괄호 case에서 return이 있다는 생각으로 switch 이용시 반드시 필요한 break를 넣어주지 않아 원하는 결과가 나오지 않아 애먹었다. 단순하게만 생각하지 말고 case 갈리는 지점 잘 생각해서 switch 이용할 것.

댓글