CODING TEST

백준 9012번 - 괄호

우진하다 2023. 5. 15. 20:50

나의 풀이.

스택을 이용해 "(" 일때 put, ")" 일 때 pop()해서 현재 스택이 비었는지 확인하기.

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int inputCnt = sc.nextInt();

        for (int i = 0; i < inputCnt; i++) {
            String inputStr = sc.next();
            Stack<String> stack = new Stack<>();
            boolean checkFlag = true;

            for (String str : inputStr.split("")) {
                if (str.equals("(")) {
                    stack.push(str);
                } else {
                    if (stack.isEmpty()) {
                        checkFlag = false;
                        break;
                    } else {
                        stack.pop();
                    }
                }
            }
            if (checkFlag && stack.isEmpty()) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
}

비슷한 유형을 봤었어서 쉽게 풀 줄 알았는데 조건문에서 엄청 헤맸다.
그리고 예제는 맞는데 제출하면 자꾸 틀려서 찾아보니 nextLine() -> next()의 문제...

- next() : 공백을 기준으로 한 단어 또는 한 문자씩 입력받는다 / 버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽는다 / 개행 문자를 가져오지 않는다.
- nextLine() : 문자 또는 엔터를 치기 전까지의 문장 전체를 입력받는다. / 버퍼에 입력된 문자열을 개행 문자까지 다 가져온다.

`Scanner` 클래스에서 `next()`와 `nextLine()` 메서드는 둘 다 사용자 입력을 받아서 문자열을 반환하는 메서드입니다.

`next()` 메서드는 사용자 입력에서 공백을 만나면 입력을 종료하고, 이전까지 입력된 내용을 반환합니다. 따라서, 예를 들어 사용자가 "Hello, world!"라는 문자열을 입력했다면, `next()` 메서드를 호출하면 "Hello,"를 반환하고, 다음에 `next()` 메서드를 호출하면 "world!"를 반환합니다.

반면에 `nextLine()` 메서드는 사용자 입력에서 개행 문자(`\n`)를 만나면 입력을 종료하고, 이전까지 입력된 전체 내용을 반환합니다. 따라서, `nextLine()` 메서드는 사용자 입력에서 한 줄 전체를 읽어들일 때 주로 사용됩니다.

또한, `next()` 메서드는 입력된 문자열의 앞뒤에 있는 공백을 제거한 후 반환하지만, `nextLine()` 메서드는 입력된 문자열의 앞뒤에 있는 공백을 유지한 채 반환합니다.


문제출처 : https://www.acmicpc.net/problem/9012