Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

공부블로그

[백준] 9012번 괄호 본문

IT/알고리즘

[백준] 9012번 괄호

So1_b 2022. 8. 24. 10:20

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

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

www.acmicpc.net

 

 

처음에는

' ( '의 개수와 ' ) '개수가 일치하면 되는 문제라고 이해해

' ( '는 pop(), ' ) '는 push()의 아이디어를 사용할 수 없었다.

' ) '가 더 많이 와도 뒤에 ' ( '가 동일하게 올 수 도있으니까

따라서 stack두개를 만들어 사이즈가 똑같으면 "YES"를 출력하고 그렇지 않을 경우 "NO"를 출력하도록 코드를 작성

 

 

( )의 순서가 맞아야 VPS

 

[코드 해석]

- 테스트 케이스 횟수를 입력받고 그 길이만큼 String[ ] 생성 

- 문자열을 입력 받는다.

 

     문자열의 길이x가  2≤x≤50  아닐경우 다시 받도록 한다.

     

     ' ( '이면 push( ) 

     ' ) '이고 stack이 비어있지 않을 경우 pop( )

     비어있다는 의미는 ( )의 순서가 이미 깨진 상태로 "NO"가 출력되어야 함.

   

    마지막으로 stack의 상태에 따라 "YES" or "NO"를 String[ ]에 저장시킨다.

 

- String[ ]을 하나하나 출력한다.

 

import java.util.*; //Scanner, Stack
public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String[] str = new String[scan.nextInt()]; scan.nextLine();
		
		int i=0;
		while(i<str.length) {
			char[] c = scan.nextLine().toCharArray();
			Stack<Integer> stack = new Stack<Integer>();
			
			//길이 제한
			if(c.length<2 || c.length>50)
				continue; //다시 입력받음
			
			for(char ch: c) {
				if(ch == '(')
					stack.push(1);
				else if(ch == ')') {
					if(stack.empty()){ 
						str[i] = "NO";
						break;
					}else
						stack.pop();
				}
					
			}//for
			
			if(stack.empty() && str[i] == null)
				str[i] = "YES";
			else 
				str[i] = "NO";
			i++;
		}//while
		
		for(String s: str) {
			System.out.println(s);
		}
	}//main

}//class

'IT > 알고리즘' 카테고리의 다른 글

[백준] 2750  (0) 2022.09.18
[프로그래머스] 1차 다트게임  (0) 2022.09.13
[백준] 9093번 단어 뒤집기  (0) 2022.08.22
[프로그래머스] 체육복  (0) 2022.08.18
[프로그래머스] 폰켓몬  (0) 2022.08.15
Comments