https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문제 분석
첫번째로 입력될 문자열의 개수가 주어지고,
주어진 문자열에 대해 괄호 문자열의 집합인지 아닌지 판단하여 결과를 YES / NO 로 출력하는 문제이다.
예를 들어 "(())(())" 가 입력으로 주어진다면, 안쪽의 괄호 쌍 (), ()가 있고, 그 괄호를 감싸는 괄호 쌍이 ( ), ( ) 로 이루어져 있으니
YES로 출력하면 된다.
풀이
1. 먼저 t에 받을 문자열 개수 입력받기
2. t만큼 반복하도록 for 문 생성 후, 그 안에서 각각의 문자열을 입력 받도록 함
3. 첫번째 분기에서 2로 나누어 나머지가 0이 아닐 경우 (문자열 길이가 홀수로 들어왔을 경우) 괄호 쌍을 이룰 수 없으므로 바로 NO를 출력하도록 함
4. 문자열 길이가 짝수일 경우, 괄호집합인지 판단할 용도의 boolean 형 flg 변수 생성.
5. 다음으로 while 반복문 내에서 "()" 문자열이 존재하는지 판단, 존재한다면 해당 괄호를 제거하여 더 이상 제거할 괄호가 없을 때까지 반복하도록 함.
코드
public class Example9012 {
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(bf.readLine());
for (int i = 0; i < t; i++) {
String str = bf.readLine();
if (str.length() % 2 == 0) {
boolean flg = false;
while(!str.equals("")) {
flg = false;
if (str.indexOf("()") == -1) {
System.out.println("NO");
break;
}
str = str.replace("()","");
flg = true;
}
if (flg) {
System.out.println("YES");
}
} else {
System.out.println("NO");
}
}
}
}
댓글 피드백은 언제나 환영합니다!

'CodingTest > 백준' 카테고리의 다른 글
백준 1966번 - 프린터 큐 (1) | 2023.12.08 |
---|---|
백준 1874번 - 스택 수열 (1) | 2023.12.08 |
백준 10845 - 큐 (0) | 2023.09.28 |
백준 4153번 - 직각삼각형 (0) | 2023.09.22 |
백준 1654번 - 랜선 자르기 (0) | 2023.09.22 |