ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준/JAVA] 괄호의 값
    Algorithm 2024. 10. 19. 15:42

    https://www.acmicpc.net/problem/2504


    - 문제 풀이

    1. ( 또는 [를 만났을 때 스택에 추가하고, 해당 값의 곱셈값을 temp에 반영합니다.
    2. ) 또는 ]를 만났을 때:
      • 스택이 비어 있거나, 올바르지 않은 괄호 구조가 되면 0을 출력하고 종료합니다.
      • 이전 문자가 열린 괄호 ( 또는 [일 때 answer에 temp 값을 누적합니다.
    3. 모든 괄호열이 끝난 후 스택에 남아 있는 괄호가 없으면 최종 answer 값을 출력합니다.

     

     

     

    - 정답 코드

    // https://www.acmicpc.net/problem/2504
    package Data_Structure.괄호의값;
    
    import java.io.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String s = br.readLine(); // (()[[]])([])
            Stack<Character> stack = new Stack<>();
            int answer = 0;
            int temp = 1;
    
            for(int i = 0; i < s.length(); i++) {
                if(s.charAt(i) == '('){
                    stack.push(s.charAt(i));
                    temp *= 2;
                }else if(s.charAt(i) == '[') {
                    stack.push(s.charAt(i));
                    temp *= 3;
                }else if(s.charAt(i) == ')') {
                    if(stack.isEmpty() || stack.peek() == '[' || stack.peek() == ']' ) {
                        System.out.println(0);
                        return;
                    }
                    if(s.charAt(i-1) == '(') {  // stack.peek()이 아니라 s.charAt(i-1)
                        answer += temp;
                    }
                    stack.pop();
                    temp /= 2;  // temp값 초기화
    
                }else if(s.charAt(i) == ']') {
                    if(stack.isEmpty() || stack.peek() == '(' || stack.peek() == ')') {
                        System.out.println(0);
                        return;
                    }
                    if(s.charAt(i-1) == '[') {  // stack.peek()이 아니라 s.charAt(i-1)
                        answer += temp;
                    }
                    stack.pop();
                    temp /= 3; // temp값 초기화
                }
            }
            if(!stack.isEmpty()) {
                System.out.println(0);
            }else{
                System.out.println(answer);
            }
        }
    }

    'Algorithm' 카테고리의 다른 글

    [백준/JAVA] 1620번: 나는야 포켓몬 마스터 이다솜  (0) 2024.10.22
    [백준/JAVA] 2493번: 탑  (0) 2024.10.19
    [백준/JAVA] 쇠막대기  (0) 2024.10.19
    [백준/JAVA] 스택 수열  (0) 2024.10.19
    [백준/JAVA] 프린터 큐  (0) 2024.10.17
Designed by Tistory.