728x90
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 프로그램을 만드시오.
예를 들어 {( )}는 제대로 된 짝이지만, {( })는 제대로 된 짝이 아니다. 입력은 한 줄의 파이썬 코드일수도 있고, 괄호만 주
어질 수도 있다.
정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다.
print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다.
< ❓ 생각 >
< 💻 코드 >
1.
def fun(arr):
stack = ['']*len(arr)
# '(', ')', '{' ,'}'
top = -1
for i in arr:
# (,{ 여는 괄호이면 stack에 집어넣기
if i == '(' or i == '{':
top += 1
stack[top] = i
# 닫는 괄호
# ')'면 마지막에 넣은 여는 괄호가 '('여야 성공, 아니면 실패
elif i == ')':
if stack[top] == '(':
top -= 1
else:
return 0
# '}'면 마지막에 넣은 여는 괄호가 '{'여야 성공, 아니면 실패
elif i == '}':
if stack[top] == '{':
top -= 1
else:
return 0
# 여는 괄호, 닫는 괄호 짝이 다 맞다면 (stack에 남은 여는 괄호가 없다면) 성공
if top == -1:
return 1
else:
return 0
# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
# 테스트 케이스
C = input()
result = fun(C)
print(f'#{tc} {result}')
2.
def fun2(data):
# 여는 괄호면 stack에 push
# 닫는 괄호면 stack에서 pop 해서 그 결과와 짝이 맞는지 검사
# 짝이 맞지 않으면 False
# 모든 데이터를 다 읽었을 때, stack이 비어있지 않으면 False
# 비어있으면 True
N = len(data)
bracket_lst = ['{','(',')','}']
stack =[]
for i in range(N):
# 괄호인가?
if data[i] in bracket_lst:
# 여는 괄호면 stack에 추가
if data[i] == '{' or data[i] == '(':
stack.append(data[i])
# 닫는 괄호
else:
# 닫는 괄호가 먼저 나옴, 짝이 없음
if not stack:
return 0
# 가장 마지막 여는 괄호
top = stack.pop()
# 짝꿍 안맞음
if data[i] == ')' and top != '(':
return 0
if data[i] == '}' and top != '{':
return 0
# 반복 마친 후 여는 괄호 남으면 짝 안 맞음
if stack:
return 0
return 1
# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
# 테스트 케이스
C = input()
result = fun2(C)
print(f'#{tc} {result}')
< ❗ >
stack 활용!!
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 2005. 파스칼의 삼각형 - Python (0) | 2022.02.22 |
---|---|
[SWEA] 4873. 반복문자 지우기 - Python (0) | 2022.02.22 |
[SWEA] 4869. 종이 붙이기 - Python (0) | 2022.02.22 |
[SWEA] 1961. 숫자 배열 회전 - Python (0) | 2022.02.21 |
[SWEA] 1859. 백만 장자 프로젝트 - Python (0) | 2022.02.20 |
댓글