본문 바로가기

알고리즘 문제풀이/백준

[BOJ][JAVA] 9012 - 괄호

문제 출처 : https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

 

 

문제

 

설명

괄호 짝 판별 문제는 대표적인 스택문제이기 때문에, 스택 사용하신다면 큰 문제 없이 풀 수 있으실 것입니다.

여기서 키 포인트 두 가지는 다음과 같습니다.

 

1. VSP이려면 "(" 와 ")" 의 갯수가 동일해야 합니다.

2. 갯수와 상관없이 왼쪽에서 오른쪽 방향으로 진행하는 도중에 "(" 의 갯수보다 ")" 의 갯수가 더 많이 나온다면 그 뒤는 볼 것도 없이 VSP가 아닙니다. 

 

이것을 스택에 구현하면 됩니다.

 

 

코드

import java.util.Scanner;
import java.util.Stack;

public class BOJ_9012{

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		
		Stack<String> stack = new Stack<>();
		String[] answer = new String[num];
		
		for(int i=0; i<num; i++) {
			
			String s = sc.next();
			String[] arr = s.split("");
			
			for(int j=0; j<arr.length; j++) {
				if(stack.empty())//스택이 비어있으면 일단 푸시
					stack.push(arr[j]);
				else {
					if(arr[j].equals("("))
						stack.push(arr[j]);
					
					else{
						if(stack.peek().equals("(")) //짝이 맞음
							stack.pop();
						else
							stack.push(arr[j]);
					}
				}
			}
			if(stack.empty())
				answer[i]="YES";
			else
				answer[i]="NO";
			
			stack.clear();
		}
		sc.close();
		for(String s : answer)
			System.out.println(s);
	}
}

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

[BOJ][JAVA] 7568 - 덩치  (0) 2021.09.21
[BOJ][JAVA] 1181 - 단어 정렬  (0) 2021.09.21
[BOJ][JAVA] 1120 - 문자열  (0) 2021.09.18
[BOJ][JAVA] 2920 - 음계  (0) 2021.09.18
[BOJ][JAVA] 3109 - 빵집  (0) 2021.09.17