반응형
문제 내용
- ‘
()’ 인 괄호열의 값은 2이다. - ‘
[]’ 인 괄호열의 값은 3이다. - ‘
(X)’ 의 괄호값은 2×값(X) 으로 계산된다. - ‘
[X]’ 의 괄호값은 3×값(X) 으로 계산된다. - ‘
(()[[]])([])’ 의 괄호값을 구해보자. ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28 이다. - 문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하
문제 접근
올바르지 못한 괄호열이면 반드시 0을 출력이런경우 ‘+’ 로 계산 ‘[()]’ 경우 * 로 계산.(()[[]])([]) 를 처리하는 방법에 대해 생각해보자1. → 우선 올바른 괄호열인지 여부를 파악2. → value = value * ()
틀린접근
문제 풀이 방법
풀이코드
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
static String str;
static ArrayList<Boolean> buc;
static ArrayDeque<Character> stack;
static int temp;
static int result;
public static void main(String[] args) throws IOException {
temp = 1;
result = 0;
str = br.readLine();
stack = new ArrayDeque<>();
buc = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '(') {
stack.push(c);
temp *= 2;
}else if (c == '[') {
stack.push(c);
temp *= 3;
}else if (c == ')') {
if (stack.isEmpty() || stack.peek() != '(') {
result = 0;
break;
}else{
// 이전에 올수 있는 기호는 ')' or ']' or '(' // 총 3개 이다.
if (str.charAt(i - 1) == '(') {
result += temp; // 괄호가 완성된 경우다.
}
stack.pop();
temp /= 2;
}
}else {
if (stack.isEmpty() || stack.peek() != '[') {
result = 0;
break;
}else{
if (str.charAt(i - 1) == '[') {
result += temp; // 괄호가 완성된 경우다.
}
stack.pop();
temp /= 3;
}
}
}
if (!stack.isEmpty()) {
System.out.println(0);
} else {
System.out.println(result);
}
}
}
// 2 * ( 2 + 3 )
// 4 + 6 인 개념으로 개산하는거였다..
// 아..
풀이방법
- charAt 으로 값을 가지고온다.
(거나[일 경우에는stack에push)거나]일 경우에는 조건 파악- temp 값을 임시 해주는 개념이다.
temp *= 2을 해주거나temp *= 3을 해주고 괄호가 닫힐때 result += temp를 해주는 개념이다.
회고
못 풀었던이유 위의 생각은했으나 3 * 2 + 2 가 된다면 8 되어서 원하는 3 * 4 가 아니게된다. 이 부분이 어려웠고 결국 생각을 하지못해 풀지 못했다.
풀이코드를 봐도 왜 그런지 이해가 가지 않았다. 해석해보니 해당 문제 분배법칙의 개념으로 접근을 했어야했다
내 머리로는 3 * 2 + 2 를 → 3 * (2 + 2) → 3 * 4 → 12 라는 결과를 도출해야되는 내용에 매몰되었다.
위의 문제 풀이코드는 3 * (2 + 2) 를 분배법칙을 사용해서 6 + 6 이라는 개념을 사용해서 12 라는 결과를 도출하는 내용이다.
그래서 코드 temp /= 3; 와 temp /= 2; 를 왜 하는지 이해를 못했다.
풀이에 접근할때 너무 하나와 단편된 방법으로 매몰되지 않아야겠다.
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
| [BOJ][P5] 6549 히스토그램에서 가장 큰 직사각형 (0) | 2025.10.01 |
|---|---|
| [BOJ][S3] 17413_단어뒤집기2 (0) | 2025.09.26 |
| [SWEA][D2] 1940. 가랏! RC카 Java (1) | 2025.06.04 |
| [SWEA][D2] 1945. 간단한 소인수분해 Java (0) | 2025.06.04 |
| [SWEA][D2] 1288. 새로운 불면증 치료 Java (0) | 2025.06.04 |