[SW Expert Academy, SWEA 1218] [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 (java)
Problem Solving/SWEA

[SW Expert Academy, SWEA 1218] [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 (java)

728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD&categoryId=AV14eWb6AAkCFAYD&categoryType=CODE&problemTitle=1218&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

728x90

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class Solution {

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

		for (int test_case = 1; test_case <= 10; test_case++) {
			sb.append("#" + test_case + " ");
			
			Stack<Character> stack = new Stack<>(); // 소괄호를 담을 스택
			
			// 테스트 케이스의 길이
			int n = Integer.parseInt(br.readLine());
			// 괄호문들 담을 배열
			char[] arr = br.readLine().toCharArray();
			
			boolean result = true;
			for (int i = 0; i < n; i++) {
				// 여는 괄호들은 스택에 추가해줌
				if(arr[i] == '(') stack.add('(');
				else if(arr[i] == '{') stack.add('{');
				else if(arr[i] == '[') stack.add('[');
				else if(arr[i] == '<') stack.add('<');
				
				else if(arr[i] == ')') {
					if(stack.empty()) result = false; // 스택이 비어있다면 false
					else { // 닫는 괄호들이 나왔을 때 스택의 top에는 닫는 괄호의 짝이 있어야 한다.
						char tmp = stack.pop();
						if(tmp != '(') result = false;
					}
				}
				
				else if(arr[i] == '}') {
					if(stack.empty()) result = false;
					else {
						char tmp = stack.pop();
						if(tmp != '{') result = false;
					}
				}
				
				else if(arr[i] == ']'){
					if(stack.empty()) result = false;
					else {
						char tmp = stack.pop();
						if(tmp != '[') result = false;
					}
				}
				
				else{
					if(stack.empty()) result = false;
					else {
						char tmp = stack.pop();
						if(tmp != '<') result = false;
					}
				}
				
				if(!result) break;
			}
			
			// 스택에 남아있는 괄호가 있다면
			if(!stack.empty()) result = false;
			
			if(result) sb.append(1 + "\n");
			else sb.append(0 + "\n");
		}
		
		// 출력
		System.out.println(sb);
	}

}
728x90