메이쁘

(JAVA) 백준 9012번 : 괄호 본문

Algorithm/Baekjoon

(JAVA) 백준 9012번 : 괄호

메이쁘 2020. 8. 26. 22:52

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

 

9012번: 괄호

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

www.acmicpc.net

 

문자열 문제.

 

이것도 상당히 쉬운 문제이다.

 

 

괄호 문제라고 해서 필자는

 

스택을 쓰거나, 

 

복잡한 조건을 간단히 만들어서 알고리즘을 작성하거나,

 

예외가 많아 까다로울 줄 알았다.

 

 

하지만 단순하게도

 

int 변수 하나로 큰 조건 없이 '(' 와 ')' 의 개수를 파악하면 된다.

 

 

매커니즘과 해설은 크게 의미 없을 것 같고

 

이 해당 괄호가 VPS 에 부합하는 조건만 파악하면 된다.

 

  1)  '(' 는 +1, ')' 는 -1 을 수행한다.

  2)  중간에 갯수가 음수가 되는 경우 VPS가 될 수 없다.

  3)  개수 파악이 끝난 후, 계산 결과 값이 0이 아닌 경우 VPS가 될 수 없다.

 

 

이상입니다.

*** 참고로, String에서 문자 하나하나 꺼내보기 위해 toCharArray() 로 char[] 로 변환해서 파악하셔도 됩니다. (효과는 미미하다.)

 

하단 소스코드 참고해주세요!

 

 

감사합니다.

 

 

소스코드


 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 괄호
// 문자열 처리
public class p9012 {
static StringBuilder sb;
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
sb = new StringBuilder();
int n = Integer.valueOf(st.nextToken());
while(n --> 0) {
int checkCount = 0;
String gualhoStr = br.readLine();
char[] gualhoCharArr = gualhoStr.toCharArray();
boolean vps = true;
// 괄호가 담긴 문자열 괄호 탐색
for(int i = 0; i < gualhoCharArr.length; i++) {
char gualho = gualhoCharArr[i];
if(gualho == '(') {
checkCount++;
}
else {
checkCount--;
if(checkCount < 0) {
vps = false;
break;
}
}
}
// VPS 체크 조건
// 중간에 음수가 되지 않고 탐색 및 갯수 확인 결과 0이 되어야 함.
if(vps && checkCount == 0) {
sb.append("YES").append("\n");
}
else {
sb.append("NO").append("\n");
}
}
System.out.print(sb.toString());
}
}
view raw p9012.java hosted with ❤ by GitHub
Comments