이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[백준] 2504 괄호의 값 - Java / Python

  • 2022.02.12 13:14
  • Algorithm/Baekjoon

 

 

 

자료구조에서 자주 출제되는 괄호 문제이다.

스택을 사용해 해결할 수 있다.

 

다른 문제와는 다르게 괄호마다 값이 주어지고 이 값들을 계산해야 한다.

 

1. 여는 괄호가 나오면 스택에 넣어준다.

2. 닫는 괄호가 나오면 pop을 진행한다.

 

위 부분은 여러 문제에서 다룬 내용과 같지만, 값을 계산하는 부분에서 따로 처리가 필요하다.

 

() 세트가 2 [] 세트가 3이라고 했으니, 여는 괄호가 나올 때 만들어 둔 연산자 변수에 괄호에 따라 2와 3을 곱해주고,

닫는 괄호가 나올 때 만들어 둔 연산자 변수에 괄호에 따라 2와 3을 나눠줘야 한다.

 

정답 변수를 갱신하는 경우는 한 칸 전의 괄호가 세트를 이룰 경우이다.

 

예를 들어, ( ( ( ) ) ) 같은 입력이 주어졌을 때, 4번째 반복을 시행할 때 정답 변수를 갱신한다.

 

Java

 

import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		String str = br.readLine();

		Stack<Character> st = new Stack<>();
		int ans = 0;
		int temp = 1;

		for(int i=0; i<str.length(); i++){

			if(str.charAt(i)=='('){
				st.push('(');
				temp = temp * 2;
			}else if(str.charAt(i)=='['){
				st.push('[');
				temp = temp * 3;
			}else if(str.charAt(i)==')'){
				if(st.empty()||st.peek()!='('){
					ans = 0;
					break;
				}else if(str.charAt(i-1)=='('){
					ans = ans + temp;
				}		
					st.pop();
					temp = temp / 2;
			}else if(str.charAt(i)==']'){
				if(st.empty()||st.peek()!='['){
					ans =0;
					break;
				}else if(str.charAt(i-1)=='['){
					ans = ans + temp;
				}
					st.pop();
					temp = temp / 3;
			}
		}

		if(st.empty()){
			System.out.println(ans);
		}else{
			System.out.println(0);
		}


	}
}

 

 

Python

 

파이썬은 스택 자료구조를 따로 제공하지 않기 때문에 리스트를 사용해서 스택을 구현해 풀었다.

 

str = list(input())

st = []
ans =0
temp =1

for i in range(len(str)):

    if str[i] == '(':
        st.append('(')
        temp = temp * 2

    elif str[i] == '[':
        st.append('[')
        temp = temp * 3

    elif str[i] == ')':
        if not st or st[-1] != '(':
            ans = 0
            break
        elif str[i-1] == '(':
            ans = ans + temp
        st.pop()
        temp = temp / 2

    elif str[i] ==']':
        if not st or st[-1] != '[':
            ans = 0
            break
        elif str[i-1] == '[':
            ans = ans + temp
        del st[-1]
        temp = temp / 3

if(st):
    print(0)
else:
    print(int(ans))
반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 17413 단어 뒤집기 2 - Java / Python  (0) 2022.02.13
[백준] 18115 카드 놓기 - Java / Python  (0) 2022.02.12
[백준] 2346 풍선 터뜨리기 - Java / Python  (0) 2022.02.11
[백준] 1620 나는야 포켓몬 마스터 이다솜 - Java / Python  (0) 2022.02.11
[백준] 1725 히스토그램 - Java  (0) 2021.11.17

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 17413 단어 뒤집기 2 - Java / Python

    [백준] 17413 단어 뒤집기 2 - Java / Python

    2022.02.13
  • [백준] 18115 카드 놓기 - Java / Python

    [백준] 18115 카드 놓기 - Java / Python

    2022.02.12
  • [백준] 2346 풍선 터뜨리기 - Java / Python

    [백준] 2346 풍선 터뜨리기 - Java / Python

    2022.02.11
  • [백준] 1620 나는야 포켓몬 마스터 이다솜 - Java / Python

    [백준] 1620 나는야 포켓몬 마스터 이다솜 - Java / Python

    2022.02.11
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (606) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69) N
      • Operating System (18)
      • Computer Network (17) N
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (13)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바