문제 : 프로그래머스 괄호 회전하기 문제
https://school.programmers.co.kr/learn/courses/30/lessons/76502#
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

이 문제도 스택을 활용하는 문제이다. 가장 단순한 괄호 스택 문제와는 살짝 다른 점이 회전이 가능하다는 점이다.
문제 본문에 있는 A, B 예시를 보며 생각한 것이 회전을 하면서 완전한 괄호의 개수를 세면 답이 나온다는 점이었다. 이걸 활용해서 푼 것이 아래의 풀이이다.
def solution(s):
answer = 0
stk=[]
l=len(s)
i=0
while i <=l*2 and i<len(s):
if s[i]=='{' or s[i]=='[' or s[i]=='(':
stk.append(s[i])
elif len(stk)>0:
if (stk[-1]=='[' and s[i]==']') or (stk[-1]=='(' and s[i]==')') or (stk[-1]=='{' and s[i]=='}'):
stk.pop()
if len(stk)==0:
answer+=1
else:
return 0
else:
if i<l:
s=s+s[i]
else:
return 0
i+=1
if len(stk)>0:
return 0
return answer
이렇게 구현을 하면서 헷갈렸던 점은 아래와 같다.
- 괄호의 회전을 문자열 s의 연장으로 풀어나간 점
- 괄호의 회전과 괄호 완전한지 여부를 같이 while 반복문에서 풀어나간 점
그래서 while 문 안에 if, else 조건식도 많아지고 복잡해졌다. 생각해 본 해결 방법은 아래와 같다.
괄호 완전성 여부 검사와 괄호 회전을 분리해서 구현을 하는 것이다.
def solution(s):
answer = 0
def ch(s):
stk=[]
i,l=0,len(s)
while i<l:
if s[i]=='(' or s[i]=='[' or s[i]=='{':
stk.append(s[i])
elif len(stk)>0:
if (s[i]=='}' and stk[-1]=='{') or (s[i]==']' and stk[-1]=='[') or (s[i]==')' and stk[-1]=='(') :
stk.pop()
else:
return False
else:
return False
i+=1
if len(stk)>0:
return False
else: return True
for i in range(len(s)):
front=s[0:i]
temp= s[i:]+front
if ch(temp): answer+=1
return answer
이렇게 구현을 하게 되면 단순히 괄호 회전을 진행하면서 괄호 완전성을 그때 그때 함수로 판단할 수 있기 때문에 훨씬 단순해졌다. 시간 복잡도는 O(n²)으로 해결할 수 있다.
'알고리즘 > Python' 카테고리의 다른 글
| [알고리즘] 프로그래머스 H-Index - Python (1) | 2026.08.19 |
|---|---|
| [알고리즘] 프로그래머스 점프와 순간 이동 - Python (1) | 2026.08.19 |
| [알고리즘] 프로그래머스 햄버거 만들기 - Python (0) | 2026.08.14 |
| [알고리즘] 프로그래머스 미로 탈출 - Python (1) | 2026.08.14 |
| [알고리즘] 프로그래머스 구명보트 - Python (0) | 2026.08.10 |