출처 : https://www.acmicpc.net/problem/4949
입사 후 교육을 받는 기간이라 주말에 간간히 한 두 문제 정도 풀 수 있다..ㅜ
심지어 회사와 관련된 내용과 지식은 보안상 조심해야 한다고 하기 때문에 퇴사 전 까지는 알고리즘 문제 풀이 정도나 올릴 것 같다.
오늘은 오랜만에 알고리즘 문제를 풀었기 때문에 다소 쉬운 문제를 선택했다. 문자열을 다루는 문제이며 괄호 찾기와 매우 유사한 문제이기 때문에 자료구조 stack을 이용하면 쉽게 풀 수 있다.
풀이
문제를 정독하고 간단하게 알고리즘을 설계한 뒤 그대로 코드로 구현하였다.
1. 입력을 받는다.
2. 좌측 괄호('(', '[')인지 검사한다.
만약 좌측 괄호라면 스택에 넣어준다.
3. 우측 괄호인지(')', ']') 검사한다.
만약 우측 괄호라면 스택의 원소와 비교하여 괄호의 균형이 맞는지 검사한다.
4. 입력받은 문자열이 종료 문자 '.'라면 종료를, 아니라면 문제에서 원하는 출력을 수행한다
- 정답 코드
import sys
input = sys.stdin.readline
while 1:
string = input().rstrip()
stack = []
true_flag = 1
for cha in string:
if cha == '(' or cha == '[':
stack.append(cha)
elif cha == ')':
if stack and stack[-1] == '(':
stack.pop()
else:
true_flag = 0
break
elif cha == ']':
if stack and stack[-1] == '[':
stack.pop()
else:
true_flag = 0
break
if string == '.':
break
print("yes" if true_flag and not(stack) else "no")
결과
오랜만이라 그런지 또 사소한 실수 때문에 한 번만에 통과하지 못했다..ㅜ
매 주말마다 한 두 문제씩이라도 풀면서 프로그래밍에 대한 '감'을 유지하도록 해야겠다!
'Computer_Language > Algorithm' 카테고리의 다른 글
[백준] 2252번 줄 세우기 파이썬 해설 (0) | 2020.01.19 |
---|---|
[백준] 1713번 후보 추천하기 파이썬 해설 (0) | 2019.12.18 |
[백준] 7576번 토마토 파이썬 해설 (BFS) (0) | 2019.12.15 |
[백준] 1541번 잃어버린 괄호 Python 해설 (그리디 알고리즘) (1) | 2019.12.08 |
[백준] 2661번 좋은수열 Python 해설 (백트래킹 알고리즘) (0) | 2019.12.07 |