공부블로그
[백준] 9012번 괄호 본문
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