백준공부/java

[백준] 9012번 괄호 문제! (silver 4

gomduri43 2022. 7. 24. 20:02

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {

	public static void main(String[] args) throws IOException  {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int t=Integer.parseInt(br.readLine());
		int div=0;
		for(int i=0; i<t; i++) {
			div=0;
			String a=br.readLine();
			if(a.charAt(a.length()-1) =='(' || a.charAt(0) ==')') {
				System.out.println("NO");
			}
			else{
				for(int j=0; j<a.length(); j++) {
					if(a.charAt(j)=='(') {
						div++;
					}
					else if(a.charAt(j)==')') {
						div--;
					}
					if(div<0) {
						System.out.println("NO");
						break;
					}
					if(j==a.length()-1) {
						if(div==0) {
							System.out.println("YES");
						}
						else {
							System.out.println("NO");
						}
					}
				}
			}
		}
	}
}
//문제를 풀 때 처음엔 그냥 (와 )개수가 비슷하면 되는 문제라 생각했으나,
//아무리 ()의 짝이 맞아도, 처음과 끝이 무엇인지에 따라 no가
//()의 개수가 맞더라도, 중간에 (개수보다 )개수가 많아지면 짝이 안맞게되므로, no가
//(개수가 )개수보다 많아져도, 짝이 안맞으므로, no가 뜨는 등, 고려할 조건이 많았다.
//항상 문자열은 string.equals로 비교해왔지만, string.charAt()은 char형으로 출력하여,
//char은 ==와 같은 관계연산자로 비교가능하다.