스택 관련 5문제 중 벌써 3번째 문제인 9012번 : 괄호 문제를 풀었다.
스택에 대해 아직 이해하지 못했다면 다음의 블로그에서 확인하면 된다.
https://lucy1215.tistory.com/17
[자료구조] 스택 (Stack)
🚩스택 (Stack)의 개념 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO (Last In First Out) 형식의 자료 구조 ❓스택 (Stack)의 특징 1. 먼저 들어간 자료가 나중에 나옴. LIFO구조 2. 시스템 해킹에서 버퍼오버
lucy1215.tistory.com
바로 앞 문제인 10773번 : 제로 에 대한 내용은 바로 앞의 블로그에서 확인하면 된다.
https://lucy1215.tistory.com/19
[백준] 10773번 : 제로 (JAVA)
10828번 : 스택에 이어서 다음 스택 관련 문제인 10773번 : 제로 문제를 풀었다. 스택에 대해 아직 이해하지 못했다면 다음의 블로그에서 확인하면 된다. https://lucy1215.tistory.com/17 [자료구조] 스택 (Sta
lucy1215.tistory.com
<문제>
<문제 해석>
스택을 이용하여
주어진 괄호 문자열이 올바른 괄호 문자열(VPS) 인지 판단해라.
- 올바른 괄호면 YES / 올바르지 않다면 NO 출력
<문제 해결>
이 문제 또한, 스택 관련 문제이다.
스택에 대해 이해하고 있다면 어렵지 않게 풀었을 것이다.
현재 문제에서 괄호는 ' ( ' , ' ) ' 두 종류만 있다.
stack을 이용하여 문제를 풀 수 있다.
<알고리즘>
1. 문자열이 ' ( ' 일 때, stack에 해당 문자열을 push 한다.
2. 문자열이 ' ) ' 일 때, stack의 맨 위 문자열을 확인하고,
1. stack의 맨위 문자열을 pop() 한다.
- ' ) ' 문자와 괄호 짝을 이뤘기 때문이다.
2. 해당 stack이 비었을 경우에는 올바른 괄호가 아니다.
- ' ) ' 문자열이 짝을 이룰 수 있는 괄호가 없기 때문이다.
올바른 괄호인지 판별하기 위해서는
1가지 조건이 더 필요하다.
3. 문자열의 첫번째 문자가 ' ) ' 일 경우에는 올바른 괄호가 아니다.
* ' ) ' 괄호가 ' ( ' 괄호보다 먼저 올 수 없기 때문이다.*
<코드>
import java.io.IOException;
import java.util.Scanner;
import java.util.Stack;
public class Main {
static String str;
static String result;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0;i<n;i++) {
str = sc.next();
run();
System.out.println(result);
}
}
static void run() {
Stack<Character> stack = new Stack<>();
result = "NO";
if(str.charAt(0)== ')'){
result = "NO";
return;
}
for(int i=0;i<str.length();i++) {
char s = str.charAt(i);
if(s == '(') {
stack.push(s);
}
else if(s == ')') {
if(stack.empty()) {
result = "NO";
return;
}else {
stack.pop();
}
}
}
if(stack.size() == 0) {
result = "YES";
}
}
}
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
'백준' 카테고리의 다른 글
[백준] 1874번 : 스택 수열 (JAVA) (0) | 2023.01.09 |
---|---|
[백준] 4949번 : 균형잡힌 세상 (JAVA) (0) | 2023.01.09 |
[백준] 10773번 : 제로 (JAVA) (2) | 2023.01.09 |
[백준] 10828번 : 스택 (JAVA) (0) | 2023.01.09 |
[백준] 1931번 : 회의실 배정 (JAVA) (2) | 2023.01.06 |