[PS] 백준 2504 : 괄호의 값(JAVA)CS/알고리즘2024. 1. 23. 16:46
Table of Contents
문제
https://www.acmicpc.net/problem/2504
풀이
자료구조 스택을 활용하여 풀이
접근법
temp라는 임시 변수를 활용.
여는 괄호의 경우
- Stack.Push()
- temp *= 2 혹은 temp *=3
→ 여는 부분에서 곱하거나 더할 값을 temp변수에 누적
닫는 괄호의 경우
- Stack.isEmpty() 체크
- 각각의 괄호에 따라 결과값에 temp값 누적 및 temp값 감소
- temp /= 3 or temp /= 2
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
//BOJ_2504 괄호의 값
public class Main {
static int N, M, res;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Stack<Character> stack = new Stack<>();
int temp = 1;
for(int i=0; i<input.length(); i++) {
char idx = input.charAt(i);
if(idx == '(') {
stack.push(idx);
temp *= 2;
}
if(idx == '[') {
stack.push(idx);
temp *= 3;
}
else {
//닫는 괄호의 경우
if(stack.isEmpty()) {
System.out.println(0);
return;
}
if (idx == ')') {
if (stack.peek() == '(') {
if (input.charAt(i-1) == '(') {
res += temp;
}
stack.pop();
temp /= 2;
} else {
System.out.println(0);
return;
}
} else if (idx == ']') {
if (stack.peek() == '[') {
if (input.charAt(i-1) == '[') {
res += temp;
}
temp /= 3;
stack.pop();
} else {
System.out.println(0);
return;
}
}
}
}
if(!stack.isEmpty()) {
System.out.println(0);
return;
}
System.out.println(res);
}
}
반례
37%
Input
(((()))(([])))(([[]]))
Answer : 81
output : 0
--------------------------------
43%
Input
()((((()
answer : 0
정리
올바른 괄호와 관련된 문제는 대부분 스택으로 풀었기 때문에 해당 문제 또한 스택 자료구조로 접근하긴 했지만 생각보다 곳곳에서 반례가 자꾸 터져 곤란했던 문제.
풀기 전 구상한 로직에 대한 정리 및 논리적으로 검증하는 시간을 가지고 코드를 써내려갔다면 조금 더 빠르게 해답에 접근하지 않았을까 함.
자료구조관련 문제는 계속 계속 풀어봐야 할 것 같음….
'CS > 알고리즘' 카테고리의 다른 글
[PS] 백준2211 : 네트워크 복구(Java) (0) | 2024.02.27 |
---|---|
[PS] 백준 2141 : 우체국(JAVA) (0) | 2024.02.27 |
[PS] 백준2151 : 거울 설치(Java) (1) | 2024.01.05 |
[PS] 백준30894 : 유령의 집 탈출하기(Java) (2) | 2024.01.01 |
[PS] 백준1300 : K번째 수(Java) (1) | 2023.12.28 |
@Beemo9 :: BeHinD
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!