[C++] 백준/Gold/2504. 괄호의 값

2025. 2. 7. 21:02·C++/Coding Test

문제: 괄호의 값 (백준 2504번)

문제 분석

괄호 ()와 []로 이루어진 문자열이 주어질 때, 올바른 괄호열이라면 그 값을 계산하고, 올바르지 않다면 0을 출력하는 문제이다.

괄호의 구조를 유지하면서 값을 계산해야 하므로 스택 활용

  • (가 나오면 temp를 2배, [가 나오면 3배
  • )가 나오면 (가 있어야 하고, ]가 나오면 [가 있어야 함

값을 계산하는 규칙

  • 닫는 괄호 )나 ]가 나왔을 때, 직전이 여는 괄호였다면 현재 temp 값을 sum에 더함
  • 닫는 괄호가 나왔을 때는 temp 값을 원래대로 되돌림

유효성 검사

  • 스택이 비어있거나 올바르지 않은 괄호가 나오면 0 출력
  • 문자열을 끝까지 처리한 후에도 스택이 비어있지 않다면 0 출력

전체 코드

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    string str; cin >> str;

    stack<char> s;
    int sum = 0, temp = 1;

    for (size_t i = 0; i < str.size(); i++) {
        if (str[i] == '(') {
            s.push('(');
            temp *= 2;
        }
        else if (str[i] == '[') {
            s.push('[');
            temp *= 3;
        }
        else if (str[i] == ')') {
            if (s.empty() || s.top() != '(') {
                cout << 0;
                return 0;
            }
            if (str[i - 1] == '(') sum += temp;  // 바로 앞이 '('이면 값을 더함
            s.pop();
            temp /= 2;  // temp 복원
        }
        else if (str[i] == ']') {
            if (s.empty() || s.top() != '[') {
                cout << 0;
                return 0;
            }
            if (str[i - 1] == '[') sum += temp;  // 바로 앞이 '['이면 값을 더함
            s.pop();
            temp /= 3;  // temp 복원
        }
    }

    if (!s.empty()) {
        cout << 0;
        return 0;
    }

    cout << sum;
    return 0;
}

 

'C++ > Coding Test' 카테고리의 다른 글

[C++] 백준/Gold/3055. 탈출  (0) 2025.02.11
[C++] 백준/Gold/2042. 구간 합 구하기  (0) 2025.02.10
[C++] 백준/Gold/1068. 트리  (0) 2025.02.06
[C++] 백준/Silver/5014. 스타트링크  (1) 2025.02.05
[C++] 백준/Silver/1309. 동물원  (0) 2025.02.04
'C++/Coding Test' 카테고리의 다른 글
  • [C++] 백준/Gold/3055. 탈출
  • [C++] 백준/Gold/2042. 구간 합 구하기
  • [C++] 백준/Gold/1068. 트리
  • [C++] 백준/Silver/5014. 스타트링크
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (112)
      • C++ (60)
        • Coding Test (53)
        • Study (1)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (26)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (10)
        • EOS (1)
        • STILL LOADING (5)
      • Computer Science (7)
        • Algorithm (3)
      • Other (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    STILL LOADING
    수학
    dp
    BFS
    unreal 5
    UE5
    Fluid Simulation
    FPS
    Rendering Pipeline
    C++
    정렬
    구현
    OpenGL
    GPU Programming
    그래프 탐색
    자료 구조
    CS
    아이작 맵 생성
    CUDA
    Algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[C++] 백준/Gold/2504. 괄호의 값
상단으로

티스토리툴바