[BOJ][G5] 2504 괄호의값

2025. 9. 27. 16:50·알고리즘 문제풀이
반응형

문제 내용

  1. ‘()’ 인 괄호열의 값은 2이다.
  2. ‘[]’ 인 괄호열의 값은 3이다.
  3. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다.
  4. ‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다.
  5. ‘(()[[]])([])’ 의 괄호값을 구해보자. ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28 이다.
  6. 문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하

문제 접근

  1. 올바르지 못한 괄호열이면 반드시 0을 출력
  2. 이런경우 ‘+’ 로 계산 ‘[()]’ 경우 * 로 계산.
  3. (()[[]])([]) 를 처리하는 방법에 대해 생각해보자
  4. 1. → 우선 올바른 괄호열인지 여부를 파악
  5. 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
'알고리즘 문제풀이' 카테고리의 다른 글
  • [BOJ][P5] 6549 히스토그램에서 가장 큰 직사각형
  • [BOJ][S3] 17413_단어뒤집기2
  • [SWEA][D2] 1940. 가랏! RC카 Java
  • [SWEA][D2] 1945. 간단한 소인수분해 Java
WHITE_FROST
WHITE_FROST
개발공부리뷰블로그
    반응형
  • WHITE_FROST
    하얀하얀IT
    WHITE_FROST
  • 전체
    오늘
    어제
    • 분류 전체보기 (119)
      • Stack (43)
        • Next.js (7)
        • React (12)
        • React-Native (15)
        • TypeScript (0)
        • Python (2)
        • JavaScript (2)
        • Android (1)
        • DB (2)
        • JAVA (1)
      • Obsidian (1)
      • AI (3)
      • AI Tools (0)
      • Tools (0)
      • Mac (0)
      • Error (7)
      • 알고리즘 정리 (6)
      • 알고리즘 문제풀이 (46)
      • 공부일상 (4)
      • 개발 도구 & 라이브러리 (0)
      • 정보처리기사 (0)
      • 기타 (6)
      • Tip (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    D2
    reactnative
    Python
    코딩테스트
    SWEA
    java
    mongodb cloud
    react-native
    javascript
    ReactHook
    백준
    d1
    프로그래머스
    Next.js
    알고리즘
    boj
    react
    ios
    티스토리챌린지
    mongoDB Atlas
    hooks
    오블완
    react-native-maps
    React-Native cli
    error
    코테
    React Hooks
    코테준비
    Expo
    리액트네이티브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
WHITE_FROST
[BOJ][G5] 2504 괄호의값
상단으로

티스토리툴바