일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- 프로그래밍언어론
- BFS
- 스프링 프레임워크
- jvm
- 파이썬
- DP
- 모두를 위한 딥러닝
- 스타벅스
- Python
- dfs
- 다이나믹프로그래밍
- binary search
- C++
- 백트래킹
- Java
- 릿코드
- 시애틀
- leetcode
- 머신러닝
- Spring Framework
- spring
- 벤쿠버
- STL
- C/C++
- 라인
- 라인플러스
- 프로그래머스
- 백준
- 딥러닝
- Today
- Total
케이스윔의 개발 블로그
[백준][스택] 2504번 괄호의 값 본문
문제
우리는 어떤 올바른 괄호열 X에 대하여 그 괄호열의 값(괄호값)을 아래와 같이 정의하고 값(X)로 표시한다.
1. ‘()’ 인 괄호열의 값은 2이다.
2. ‘[]’ 인 괄호열의 값은 3이다.
3. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다.
4. ‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다.
5. 올바른 괄호열 X와 Y가 결합된 XY의 괄호값은 값(XY)= 값(X)+값(Y) 로 계산된다.
예를 들어 ‘(()[[]])([])’ 의 괄호값을 구해보자. ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[ ]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28 이다.
여러분이 풀어야 할 문제는 주어진 괄호열을 읽고 그 괄호값을 앞에서 정의한대로 계산하여 출력하는 것이다.
문제 출처: 백준 온라인저지(https://www.acmicpc.net/problem/2504)
풀이
처음에 문제를 보고는 생각보다 스택을 써서 풀면 간단하겠다 생각들었지만..! 잘 풀리지 않아 이후에 하드코딩을 했는데도 풀리지 않았습니다. 다시 쉽게 문제를 생각해보려 친구의 힌트를 얻어서(거의 풀이를 해줬지만) 풀었습니다. 스택을 이용해서 풀 수 있는데 () 또는 []가 들어올 경우에는 바로 숫자로 계산할 수 있으니 2 또는 3을 push합니다. (나 [가 들어오더라도 이후 짝을 찾아야 하니 push합니다. )와 ]가 들어왔을 때 처리를 잘해줘야 하는데, 올바른 괄호열이라면 )가 들어왔다면 스택에 분명히 (가 쌓여있을 것 이고 ]가 들어왔다면 스택에 분명히 [가 들어와있을 것입니다.(들어와있지 않다면 올바르지 않으므로 0을 출력하도록 합니다.) 만약 [[][]] 가 들어온다면 맨 마지막 ]가 들어올 때 스택에는 [ 3 3 이 쌓여있을 겁니다. 원하는 결과값은 18일 것입니다. 따라서 스택에 숫자가 있다면 해당 숫자들을 다 더한다음(3+3)*3 을 해주면 원하는 값이 됩니다. )일 경우에는 안의 값을 다 곱하고 *2를 해주면됩니다. 이 때 스택을 char로 선언한다면 (, [는 문제없이 들어가겠지만 숫자가 두자리수부터는 불가능합니다. 어떻게 해결할 수 있을까 생각하다가 (는 -1, [는 -2로 처리해주었습니다. 이렇게 반복적으로 입력받은 문자열에 대한 스택을 쌓아나가면 마지막엔 스택에 숫자들만 남아있을 것이고, 이 숫자들을 다 더한 값이 원하는 최종 결과값이 됩니다. 결국엔 처음에 생각했던 로직과 비슷하게 풀어나간 것 같다는 생각이 들었지만 좀 더 깔끔하게 정리하지 않고 문제를 풀려해서 잘 풀리지 않았던 것 같습니다.
생각보다 예외가 많은 문제였습니다. ()), (, [ 와 같이 올바른 괄호열이 아닐 경우 0을 출력해주도록 처리해야합니다.
코드
https://github.com/kswim/Algorithm/blob/master/Stack/2504.cpp
'Algorithm' 카테고리의 다른 글
[Leetcode] 199. Binary Tree Right Side View (0) | 2022.07.12 |
---|---|
[Leetcode] 746. Min Cost Climbing Stairs (0) | 2022.07.10 |
[프로그래머스][DFS] 후보키 (0) | 2019.02.05 |
[프로그래머스][트리] 길 찾기 게임 (0) | 2019.01.31 |
[프로그래머스][스택] 쇠막대기 (0) | 2018.12.26 |