Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 안드로이드
- programers
- VSCode
- 파이썬
- softeer
- Android
- 플러터
- 소프티어
- 코테
- 개발
- DART
- 현대sw
- java
- 자바
- 다트
- 스위프트
- 아마존 웹 서비스
- MVVM
- kotlin
- GDSC
- baekjoon
- 코틀린
- SWIFT
- 머신러닝
- Flutter
- aws
- 프로그래머스
- 알고리즘
- Python
Archives
- Today
- Total
조준장 개발자 생존기
[baekjoon] 백준 2504번(파이썬): 괄호의 값 본문
문제
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
알고리즘
- 입력받은 괄호를 반복문을 통해 확인한다.
- "(" 와 "[" 이면 스택에 추가해준다.
- ")" 경우와 "]" 경우는 조건문을 통해 나눠서 코드를 작성한다.
코드
import sys
s = str(sys.stdin.readline().strip())
stack = []
# 입력받은 괄호를 반복문을 통해 확인한다.
for i in s:
# i가 "(", "[" 일 경우 스택에 추가
if i == "(" or i == "[":
stack.append(i)
else:
if stack and i == ')':
# 스택의 길이가 1보다 크고 스택 맨 뒤에 두번째 요소가 "("이고 스택 맨 뒤에 요소가 숫자일 경우
# "()" 괄호 안에 들어 있는 숫자 이므로 (2 * x) 를 해준다.
if len(stack) > 1 and stack[-2] == "(" and str(stack[-1]).isdigit():
cnt = stack.pop() * 2 # 숫자 팝
stack.pop() # "(" 팝
stack.append(cnt)
# 스택의 맨 뒤에 요소가 "("일 경우
# "()" 괄호 이므로 2를 스택에 추가
elif stack[-1] == '(':
stack.pop() # "(" 팝
stack.append(2)
# 그 외의 문자열은 올바르지 못한 괄호
else:
stack.append("fall")
break
elif stack and i == ']':
# 스택의 길이가 1보다 크고 스택 맨 뒤에 두번째 요소가 "["이고 스택 맨 뒤에 요소가 숫자일 경우
# "[]" 괄호 안에 들어 있는 숫자 이므로 (3 * x) 를 해준다.
if len(stack) > 1 and stack[-2] == "[" and str(stack[-1]).isdigit():
cnt = stack.pop() * 3 # 숫자 팝
stack.pop() # "[" 팝
stack.append(cnt)
# 스택의 맨 뒤에 요소가 "["일 경우
# "[]" 괄호 이므로 3을 스택에 추가
elif stack[-1] == '[':
stack.pop()
stack.append(3)
# 그 외의 문자열은 올바르지 못한 괄호
else:
stack.append("fall")
break
# # 그 외의 문자열은 올바르지 못한 괄호
else:
stack.append("fall")
break
# 스택의 길이가 1보다 크고 스택의 맨 뒤 두번째 요소와 맨 뒤에 요소가 숫자일 경우 두 요소를 더해준다.
if len(stack) > 1 and str(stack[-1]).isdigit() and str(stack[-2]).isdigit():
stack.append(stack.pop() + stack.pop())
# 스택의 길이가 1이고 숫자일 경우 스택의 값을 출력
if len(stack) == 1 and str(stack[-1]).isdigit():
print(*stack)
# 그 외에는 올바르지 못한 괄호 이므로 0을 출력
else:
print(0)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 5397번(파이썬): 키로거 (0) | 2021.10.04 |
---|---|
[baekjoon] 백준 9375번(파이썬): 패션왕 신해빈 (0) | 2021.10.03 |
[baekjoon] 백준 1620번(파이썬): 나는야 포켓몬 마스터 이다솜 (0) | 2021.10.01 |
[baekjoon] 백준 2493번(파이썬): 탑 (0) | 2021.09.30 |
[baekjoon] 백준 11286번(파이썬): 절댓값 힙 (0) | 2021.09.29 |