미소를뿌리는감자의 코딩

[백준 2024/01/18] 9012번 괄호 본문

코딩 테스트/백준

[백준 2024/01/18] 9012번 괄호

미뿌감 2024. 1. 18. 19:21
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 를 출력해주었다.

 

rough draft

 

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