설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
입력
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
출력
첫 번째 줄에 YES, NO를 출력한다.
예시 입력 1
(()(()))(()
예시 출력 1
NO
Stack 자료구조를 이용하는 문제는 맞지만, 현재 Stack 클래스는 사용하지 않는다고 배웠다.
스택은 자바 1버전에서 사용하던 Vector 를 상속받은 클래스라는데.. 이제는 하위 버전 호환용으로만 존재할 뿐 사용하지 않기 때문에 Deque 로 풀었다.
Deque는 스택의 push(), pop() 메서드와 Queue의 offer(), poll() 메서드 모두 지원하기 때문에 아주 효율적인 자료구조이다.
import java.util.*;
//반드시 여는 괄호가 있어야함을 인지하고 풀자
public class GualHo {
public static void main(String[] args) {
Deque<Character> deque = new ArrayDeque<>();
Scanner sc = new Scanner(System.in);
String str = sc.next();
solution(str, deque);
}
// 닫는 괄호는 굳이 push 할 필요가 없다
private static void solution(String str, Deque<Character> deque) {
char[] charArray = str.toCharArray();
for (char c : charArray) {
if (c == '(') {
deque.push('(');
} else if (c == ')') {
if (deque.isEmpty()) {
System.out.println("NO");
return;
}
deque.pop();
}
}
if (deque.isEmpty()) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
'Algorithm > CT' 카테고리의 다른 글
[Algorithm] 팰린드롬 수 - (백준 1259) (1) | 2024.12.26 |
---|---|
[Algorithm] 피보나치 수열 (반복문, DFS) (0) | 2024.12.25 |
[Java] [이코테] 1이 될 때까지 (0) | 2024.09.19 |
[Java] [프로그래머스] 햄버거 만들기 (0) | 2024.09.12 |
[Algorithm] [백준] 항상 문제를 잘 읽어라(11382번) (0) | 2024.07.27 |