알고리즘 문제풀이/백준

#9012 : 괄호

모항 2022. 3. 2. 12:39

풀이방법

사용된 것:

스택

 

2022.03.02

boolean 형 변수 v를 사용한다.

해당 문자열이 올바른 괄호 문자열이면 v 를 true로, 그렇지 않으면 false로 설정할 것이다.

v의 초기값은 true이다.

 

반복문 내에서, 주어진 문자열을 가장 앞 글자부터 한 글자씩 다룬다.

 

이번 문자가 '(' 라면 스택에 넣는다.

이번 문자가 ')' 라면,

현재 스택에 '(' 가 하나 이상 들어있을 경우 '(' 하나를 pop 한다.

현재 스택이 비어있다면 이 문자열은 올바른 괄호 문자열이 아니다. v의 값을 false로 바꾸고 반복문을 종료한다.

 

중단 없이 문자열의 마지막 글자까지 처리를 마쳤다면,

이 때 스택이 비어있으면 이 문자열은 올바른 괄호 문자열이다.

이 때 스택에 '(' 가 하나 이상 남아있다면 이 문자열에는 ')' 보다 '(' 가 더 많으므로 올바른 괄호 문자열이 아니다. v의 값을 false로 바꾼다.

 

v의 값이 초기값 그대로 true라면 YES를, false로 바뀌어있다면 NO를 화면에 출력한다.

 

코드

Java(2022.03.02)

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

public class Main {

	static Stack<Character> stack;
	static String input;
	static char[] arr;
	static int n;
	static boolean v;
	
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		
		n = Integer.parseInt(br.readLine());
		
		for(int i = 0; i<n; i++) {
			stack = new Stack<>();
			v = true;
			input = br.readLine();
			arr = input.toCharArray();
			for(char c : arr) {
				if(c == '(') {
					stack.add(c);
				}
				else {
					if(stack.isEmpty()) {
						v = false;
						break;
					}
					else stack.pop();
				}
			}
			
			if(!stack.isEmpty()) {
				v = false;
			}
			
						
			if(v) System.out.println("YES");
			else System.out.println("NO");
			
		}
	}

}

 

Java(2022.03.15, E-PPER 제출을 위한 solution 함수 형식)

	public static String[] solution(int T, String[] inputs) {
		String answer[] = new String[T];
		
		for(int i = 0; i<T; i++) {
			Stack<Character> stack = new Stack<>();
			boolean v = true;
			String input = inputs[i];
			char[] arr = input.toCharArray();
			for(char c : arr) {
				if(c == '(') {
					stack.add(c);
				}
				else {
					if(stack.isEmpty()) {
						v = false;
						break;
					}
					else stack.pop();
				}
			}
			
			if(!stack.isEmpty()) {
				v = false;
			}
			
						
			if(v) answer[i] = "YES";
			else answer[i] = "NO";
			
		}
		return answer;
	}

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

#3190 : 뱀  (0) 2022.03.02
#2607 : 비슷한 단어  (0) 2022.03.02
#2231 : 분해합  (0) 2022.03.02
#9237 : 이장님 초대  (0) 2022.02.24
#20921 : 그렇고 그런 사이  (0) 2022.02.24