[JAVA]백준 2504번 괄호의 값
[JAVA]백준 2504번 괄호의 값
📌문제 링크
https://www.acmicpc.net/problem/2504
📌문제 설명
스택 문제로 잘 알려져있는 괄호 판별 문제입니다. 예외 처리와 맨 안쪽 괄호열 판별만 잘 하면 됩니다.
📌코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.io.*;
import java.util.Stack;
public class Main {
static String str;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static Boolean flag = true;
static int answer = 0;
public static void main(String[] args) throws IOException {
input(); // 입력 받기
solve(); // 문제 해결
if (flag) {
bw.write(answer + "\n"); // 결과 출력
} else {
bw.write("0\n"); // 잘못된 입력일 경우 0 출력
}
bw.flush(); // 버퍼 비우기
bw.close(); // BufferedWriter 닫기
}
public static void input() throws IOException {
str = br.readLine(); // 입력값 읽기
br.close(); // BufferedReader 닫기
}
public static void solve() {
Stack<Character> st = new Stack<>(); // 스택 생성
int temp = 1; // 임시 변수 초기화
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i)) {
case '(': // '('를 만났을 때
st.push('('); // 스택에 '(' 추가
temp *= 2; // temp 값을 2배로 증가
break;
case '[': // '['를 만났을 때
st.push('['); // 스택에 '[' 추가
temp *= 3; // temp 값을 3배로 증가
break;
case ')': // ')'를 만났을 때
if (st.isEmpty() || st.peek() != '(') { // 스택이 비어있거나 스택의 최상단이 '('가 아닐 때
flag = false; // 잘못된 입력으로 플래그 설정
return;
}
if (str.charAt(i - 1) == '(') { // 이전 문자가 '('일 때
answer += temp; // answer에 temp 값 추가
}
st.pop(); // 스택에서 '(' 제거
temp /= 2; // temp 값을 2로 나누기
break;
case ']': // ']'를 만났을 때
if (st.isEmpty() || st.peek() != '[') { // 스택이 비어있거나 스택의 최상단이 '['가 아닐 때
flag = false; // 잘못된 입력으로 플래그 설정
return;
}
if (str.charAt(i - 1) == '[') { // 이전 문자가 '['일 때
answer += temp; // answer 에 temp 값 추가
}
st.pop(); // 스택에서 '[' 제거
temp /= 3; // temp 값을 3으로 나누기
break;
}
}
if(!st.isEmpty()) { // 스택이 비어있지 않을 때
flag = false; // 잘못된 입력으로 플래그 설정
}
}
}
This post is licensed under CC BY 4.0 by the author.