카테고리 없음
[알고리즘 문제 풀이] 4866. 괄호검사
dmscks3126
2024. 9. 11. 13:48
📍 문제 요약
주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 프로그램을 만드시오.
예를 들어 {( )}는 제대로 된 짝이지만, {( })는 제대로 된 짝이 아니다.
입력은 한 줄의 파이썬 코드일수도 있고, 괄호만 주어질 수도 있다.
정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다.
print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다.
🧩 로직 설계 1 >> X
1) 주어진 문자열을 stack에 하나씩 넣으며 검사
2) '(' 라면 넣는다
3) ')' 라면 '(' == stack[-1] 을 뺀다.
4) 스택에 뭐라도 남았다면 괄호검사 실패 >> return 0
5) 안남았다면 괄호검사 성공 >> return 1
🧩 로직 설계 2 >> O
1) 주어진 문자열을 stack에 넣으면서 검사
2) '(' or '{' 이라면 넣고
3) ')' or '}' 이라면 빈 스택인지 검사하고, pop한 값이 '(' or '{' 인지 검사
4) result = 1 로 초기화, 검사가 다 돌았을 시 문제가 없으면 그대로 출력
5) 스택이 비었거나, 알맞은 괄호가 아니라면 result = 0출력
💡 소스 코드
T = int(input())
for tc in range(1, T+1):
s = input()
stack = []
result = 1
for char in s:
if char == '(' or char == '{':
stack.append(char)
elif char == ')':
if not stack or stack.pop() != '(':
result = 0
break
elif char == '}':
if not stack or stack.pop() != '{':
result = 0
break
if stack:
result = 0
print(f'#{tc} {result}')
🔎 회고
- stack[-1]과 stack.pop() 은 다르다.
- stack.pop(): 스택에서 마지막 요소를 제거하고 그 값을 반환
즉, 요소를 꺼낸 후 스택에서 그 요소는 더 이상 존재하지 않는다 - stack[-1]: 스택에서 마지막 요소를 제거하지 않고 단순히 참조한다. 따라서 스택의 상태는 변하지 않는다
- stack.pop(): 스택에서 마지막 요소를 제거하고 그 값을 반환
- 문제를 잘 읽어야 한다. '(' 뿐만 아니라 '{' 도 검사해줘야 함