[백준] 2504번 - 괄호의 값

2025. 1. 21. 15:52·PS

 

스택을 활용해서 풀 수 있는 문제!

괄호 관련된 문제는 스택으로 풀 수 있는 것 같다.

 

 

 

 

char형을 담을 stack을 선언한다.

 

1. '(' 를 만날 때

계수에 2를 곱한 후, '('를 stack에 push 한다.

 

2. '{' 일 경우

계수에 3을 곱한 후, '{'을 stack에 push 한다.

 

3. ')' 일 경우

stack에서 괄호를 뻄 (pop)

계수를 2로 나눈다.

- stack이 비어있거나 stack의 가장 위에 있는값이 '(' 이 아닐경우

올바른 입력이 아니므로, 반복문을 탈출한다.

- i-1번째 인덱스 문자열이 '(' 인 경우 sum에 계수(num)를 더한다.

 

4. ']' 인 경우

stack에서 괄호를 뺌 (pop)

계수를 3으로 나눈다.

- stack이 비어있거나 stack의 가장 위에 있는값이 '[' 이 아닐경우

올바른 입력이 아니므로, 반복문을 탈출한다.

- i-1번째 인덱스 문자열이 '[' 인 경우 sum에 계수(num)를 더한다.

 

 

 

 

package 백준.스택;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class baekjoon_2504 {
    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 sum = 0;
        int num = 1;

        for (int i = 0; i < input.length(); i++) {
            char ch = input.charAt(i);
            if (ch == '(') {
                num *= 2;
                stack.push(ch);
            }
            if (ch == '[') {
                num *= 3;
                stack.push(ch);
            }
            if (ch == ')') {
                if (stack.isEmpty() || stack.peek() != '(') {
                    sum = 0;
                    break;
                } else if (input.charAt(i - 1) == '(') {
                    sum += num;
                }
                stack.pop();
                num /= 2;
            }
            if (ch == ']') {
                if (stack.isEmpty() || stack.peek() != '[') {
                    sum = 0;
                    break;
                } else if (input.charAt(i - 1) == '[') {
                    sum += num;
                }
                stack.pop();
                num /= 3;
            }
        }
        if (!stack.isEmpty()) sum = 0;
        System.out.println(sum);

    }
}

 

 

 

'PS' 카테고리의 다른 글

[백준] 1542번 - 잃어버린 괄호  (0) 2025.02.15
[백준] 11047번 동전 0  (0) 2025.01.30
[백준] 2751번 - 수 정렬하기 2 (시간 초과)  (1) 2025.01.12
[백준] 16564 - 히오스 프로그래머  (2) 2025.01.11
[프로그래머스] lv2. 가장 큰 수  (1) 2025.01.04
'PS' 카테고리의 다른 글
  • [백준] 1542번 - 잃어버린 괄호
  • [백준] 11047번 동전 0
  • [백준] 2751번 - 수 정렬하기 2 (시간 초과)
  • [백준] 16564 - 히오스 프로그래머
zioni
zioni
  • zioni
    jiwon's dev.log
    zioni
  • 전체
    오늘
    어제
    • 분류 전체보기 (76)
      • spring & java (13)
      • Algorithm (14)
      • PS (37)
      • project (3)
      • experience (1)
      • etc (6)
      • study (2)
  • 블로그 메뉴

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

    • Github
  • 공지사항

  • 인기 글

  • 태그

    자바
    java
    백준2525
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
zioni
[백준] 2504번 - 괄호의 값
상단으로

티스토리툴바