본문 바로가기
programming/알고리즘 풀이

[백준(Baekjoon)/JAVA] 9012. 괄호

by 몽구스_ 2021. 1. 8.
728x90

 

 

애초에 입력받은 값의 길이가 홀수이면 짝이 맞을리가 없으니까

길이가 짝수인 것만 살펴본다.

 

result는 몇쌍이 있는지 나타낸다.

14개가 있으면 7쌍이어야 하므로 result == len / 2로 조건문을 달았다.

그렇게 스택을 다 비우고 쌍이 맞아야 YES를 출력리스트에 넣는다.

출력은 리스트를 이용해 한번에 한다.

 

 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class bj9012 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int num = sc.nextInt();
		List<String> list = new ArrayList<>();
		Stack<Character> stack = new Stack<>();
		StringBuffer sb = new StringBuffer();
		
		sc.nextLine();
		
		for(int i = 0; i < num; i++) {
			int len = 0;
			int result = 0;
			sb.append(sc.nextLine());
			len = sb.length();
			if(len % 2 == 0) {
				for(int j = 0; j < len; j++) {
					if(sb.charAt(j) == ')') {
						if(stack.isEmpty() == false && stack.peek().equals('(')) {
							stack.pop();
							result++;
						}
					}
					else
						stack.push(sb.charAt(j));
				}
				if(stack.isEmpty() == true && result == len/2) 
					list.add("YES");
				else list.add("NO");
			}
			else list.add("NO");
			sb.setLength(0);
			while(stack.isEmpty() == false)
				stack.pop();
		}
		
		for(String data : list){
			System.out.println(data);
		}
		
		sc.close();
	}

}

 

 

이건 자료구조 수업들었을 때 스택부분에서 대강 말씀해주시고 지나간 문제인데

그때의 수도코드는 딱히 기억나지않아서

일단 내가 풀 수 있는대로 풀었다.

 

어쩌다보니 코드가 되게 길어졌다.

 

 

 

/0106

댓글