문제설명
소스코드
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i = 0; i < T; ++i)
{
boolean ans = func(sc.next()); //nextLine()이 아니라 next()를 사용
if(ans == true) System.out.println("YES");
else System.out.println("NO");
}
}
public static boolean func(String str)
{
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); ++i)
{
char tmp = str.charAt(i);
if (tmp == '(') stack.push(tmp); //'(' 가 들어오면 push
else if (stack.empty()) return false; //')' 가 들어오면 pop을 해야하는데 스택이 비었다면 VPS가 아니다.
else stack.pop(); //')' 가 들어오면 pop
}
if (stack.empty()) return true; //'('의 수만큼 ')'의 수가 정상적으로 빠졌다면 스택은 비어있어야 한다.
else return false;
}
}
설명
- 기본적으로 '('의 수와 ')'의 수가 같아야 한다.
- 함수는 문자열을 검사하여 '('가 들어오면 푸시를하고, ')'가 들어오면 팝을 한다.
- ')'가 들어와서 팝을 해야하는데, 스택이 비어있다면 VPS가 아니다.
- 문자열을 모두 돌고 스택이 비어있다면 '('의 수와 ')'의 수가 같은 것이다.
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[Java] 백준 11866번 문제(요세푸스 문제 0) (0) | 2023.08.08 |
---|---|
[Java] 백준 12789번 문제 (도키도키 간식드리미) (0) | 2023.08.08 |
[Java] 백준 28278번 문제 (스택 2) (0) | 2023.08.06 |
[Java] 백준 10773번 문제 (제로) (0) | 2023.08.06 |
[Java] 백준 17단계 - 11050번 문제 (이항 계수1) (0) | 2023.07.30 |