자료구조&알고리즘/프로그래머스
[Python] 올바른 괄호 - 스택/큐
두잇 두두
2024. 2. 6. 21:44
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
def solution(s):
cnt = 0
for i in s:
if i == "(":
cnt +=1
elif i == ")":
if cnt < 1:
return False
cnt -=1
if cnt == 0:
return True
else:
return False
다른 사람 코드
def is_pair(s):
st = list()
for c in s:
if c == '(':
st.append(c)
if c == ')':
try:
st.pop()
except IndexError:
return False
return len(st) == 0
def is_pair(s):
wt = 0
for c in s :
if c == '(' : wt += 1
elif c == ')' : wt -= 1
if wt < 0 : return False
return wt == 0
접근법
스택 자료구조를 활용하는 문제로 괄호의 짝을 확인하는 방식으로 해결할 수 있습니다. 스택은 마지막에 열린 괄호가 처음으로 닫힌다는 Last In, First Out (LIFO) 원리를 사용합니다.
다른 사람 코드의 1 이 스택을 이용한 원리를 잘 사용한 코드입니다.
def solution(s):
stack = [] # 스택을 사용할 리스트 생성
for bracket in s:
if bracket == "(":
stack.append(bracket) # 여는 괄호일 경우 스택에 추가
else:
if not stack: # 스택이 비어있으면서 닫는 괄호가 나오면 올바르지 않은 괄호이므로 False 반환
return False
stack.pop() # 스택에서 여는 괄호 제거
return not stack # 스택이 비어있으면 올바른 괄호, 비어있지 않으면 올바르지 않은 괄호
좀 더 활용한 코드입니다.
배운 점