나의 풀이.
스택을 이용해 "(" 일때 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
'CODING TEST' 카테고리의 다른 글
프로그래머스 - 짝수와 홀수 (0) | 2023.05.16 |
---|---|
백준 10807번 - 개수 세기 (0) | 2023.05.15 |
백준 2830번 - 행성 X3 (0) | 2023.05.15 |
프로그래머스 - 숫자 문자열과 영단어 (0) | 2023.05.15 |
프로그래머스 - 짝수는 싫어요 (0) | 2023.05.15 |