나의 풀이
from collections import *
def solution(s):
cnt=0
stack=[]
que=deque(s)
for i in range(len(s)):
#왼쪽으로 1칸씩 이동시킨다.
que.rotate(-1)
tmp=list(que)
#bracket_judge함수의 리턴값이 True이면 올바른 괄호 문자열이라고 판단
if bracket_judge(tmp) == True:
cnt+=1
return cnt
def bracket_judge(tmp):
answer =True
stack=[]
dict = { '(':')', '[':']', '{':'}'}
for i in range(len(tmp)):
if tmp[i] in ['(', '[', '{']:
#이 코드 부분에서 tmp[i]는 key를 의미한다.
#즉 key만 스택에 넣는다.
stack.append(tmp[i])
elif tmp[i] in [')', ']','}']:
#이 코드 부분에서 tmp[i]는 value를 의미한다.
if(len(stack)==0):
answer=False
break
else:
#stack바깥에 있는 tmp[i]인 value와 stack[-1]에 해당하는 value값을 찾아서 비교한 후
#같으면 pop한다.
if tmp[i] == dict[stack[-1]]:
stack.pop()
if len(stack)!=0:
answer=False
return answer
▶ deque를 이용해서 rotate함수를 사용하였다.
▶ 문자열을 좌측으로 계속밀었다.
다른 사람의 풀이
def is_valid(s):
stack = []
for ch in s:
if not stack:
stack.append(ch)
elif stack[-1] == '(':
if ch==')': stack.pop()
else: stack.append(ch)
elif stack[-1] == '{':
if ch=='}': stack.pop()
else: stack.append(ch)
elif stack[-1] == '[':
if ch==']': stack.pop()
else: stack.append(ch)
return False if stack else True
def solution(s):
answer = 0
for i in range(len(s)):
answer += is_valid(s[i:]+s[:i])
return answer
▶ 문자열 슬라이싱으로 "문자열 밀기"를 구현하였다.
'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글
튜플→Counter, 정규식, most_common(), split()★★ (0) | 2022.12.27 |
---|---|
위장★★→ Counter(), reduce() 모든 요소의 곱 + 모든 요소에 +1 (0) | 2022.12.27 |
행렬의 곱셈★★★→3중 for문 (0) | 2022.12.26 |
1차 캐시→체크리스트X, OrderedDict()★★ (0) | 2022.12.26 |
멀리 뛰기 → 점화식★★ + 재귀함수★★ + 피보나치수열 (0) | 2022.12.25 |