미소를뿌리는감자의 코딩
[백준 2024/01/18] 9012번 괄호 본문
728x90
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
1. 접근 방법
해당 문제는 자료 구조 시간에 배웠던 것이어서 바로 접근할 수 있었다.
우선 문자열들을 받아서, 분리하여 stack에 넣어주었다.
이후 위에서 부터 하나씩 pop을 하여,
")" 가 출력되게 된다면, right변수 +=1 을 해주었고
"("가 출력되게 된다면 right 변수 -=1을 해주었다.
하지만 만약 right 변수가 0이어서 빼주게 된다면 음수로 변할 시,
실행을 멈추고, NO를 출력해주었다.
for 문의 실행을 완료하고도, stack에 괄호가 남아있다면,
이 또한 NO를 출력해주었다.
위 과정을 무사히 마쳤다면, YES 를 출력해주었다.
2. 코드
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;
import java.util.Stack;
public class b9012 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
for(int i = 0; i<num; i++){
String line = scanner.nextLine();
String[] st = line.split("");
if(parenthesis(st)){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}
public static boolean parenthesis(String[] st){
Stack<String> stack = new Stack<>();
for(String s : st){
stack.add(s);
}
int right = 0;
while(!stack.isEmpty()){
if(Objects.equals(stack.pop(), ")")){
//System.out.println("it worked");
right +=1;
}
else{
if(right==0){
return false;
}
else{
right -=1;
}
}
}
return right == 0;
}
}
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/01/19] 11279번 최대 힙 (0) | 2024.01.19 |
---|---|
[백준 2024/01/19] 4949번 균형잡힌 세상 (0) | 2024.01.19 |
[백준 2024/01/18] 1021번 회전하는 큐 (0) | 2024.01.18 |
[백준 2024/01/18] 1874번 스택 수열 (0) | 2024.01.18 |
[백준 2024/01/17] 18258번 큐 2 (0) | 2024.01.17 |