알고리즘 문제 풀이

SWEA 괄호 짝짓기

superbono 2021. 2. 4. 16:36

문제 출처 - swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD&categoryId=AV14eWb6AAkCFAYD&categoryType=CODE&problemTitle=%EA%B4%84%ED%98%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1&&&&&&&&&

import java.util.Scanner;
import java.util.Stack;
 
public class 괄호{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        for(int tc = 1; tc <= 10; tc++) {
            int result = -1;
            int len = sc.nextInt();
 
            String str = sc.next();
            Stack <Character> s = new Stack();
            
            for(int i=0; i < str.length(); i++) {
                if(str.charAt(i) == '(' || str.charAt(i) == '{' || str.charAt(i) == '[' || str.charAt(i) == '<' ) 
                	s.push(str.charAt(i));
                //닫는거 들어왔을 때
                else if(str.charAt(i) == ')' || str.charAt(i) == '}' || str.charAt(i) == ']' || str.charAt(i) == '>') {
                	if(str.charAt(i) == ')' && s.peek() != '(') {
                		result = 0;
                		break;
                	}
                	else if(str.charAt(i) == ')' && s.peek() == '(') {
                		s.pop();
                	}
                	if(str.charAt(i) == '>' && s.peek() != '<') {
                		result = 0;
                		break;
                	}
                	else if(str.charAt(i) == '>' && s.peek() == '<') {
                		s.pop();
                	}
                	if(str.charAt(i) == '}' && s.peek() != '{') {
                		result = 0;
                		break;
                	}
                	else if(str.charAt(i) == '}' && s.peek() == '{') {
                		s.pop();
                	}
                	if(str.charAt(i) == ']' && s.peek() != '[') {
                		result = 0;
                		break;
                	}
                	else if(str.charAt(i) == ']' && s.peek() == '[') {
                		s.pop();
                	}
                    
                }
                
                if(result ==0)break;
            }
            if(!s.isEmpty()) result = 0;
            else result = 1;
            
            
            System.out.println("#" + tc + " " + result);
            
            
        }
    }
}

문제를 깔끔하게 풀려고 욕심내다가 두 번 틀렸다... 아직 내공 쌓일 때까지는 코드가 더럽더라고 그냥 더럽게 풀어야겠다

'알고리즘 문제 풀이' 카테고리의 다른 글

백준 1065 한수 (Java 자바)  (0) 2021.02.08
SWEA 퍼펙트 셔플  (0) 2021.02.05
SWEA 1225 암호 생성기  (0) 2021.02.04
백준2164 카드2  (0) 2021.02.04
SWEA) 중간값 찾기  (0) 2021.02.03