728x90
https://school.programmers.co.kr/learn/courses/30/lessons/76502
나의 풀이
- s[1:] + s[:1]를 이용하여 문자열을 화전시키고
- len(stack) = 0, '[' '{' '(' 상황에는 append
- ']'. '}', ')' 상황에는 stack[-1] 과 비교하여 쌍이 맞다면 stack.pop() 하여 없앰
- 나머지 상황은 괄호쌍이 맞지 않는 상황이니 break로 for문을 멈춤
def solution(s):
ans = 0
for i in range(len(s)):
stack = []
s = s[1:] + s[:1]
for j in s:
if len(stack) == 0:
stack.append(j)
else:
if j == ")" and stack[-1] == "(":
stack.pop()
elif j == "]" and stack[-1] == "[":
stack.pop()
elif j == "}" and stack[-1] == "{":
stack.pop()
elif j == "(" :
stack.append(j)
elif j == "[" :
stack.append(j)
elif j == "{" :
stack.append(j)
else:
break
if len(stack) == 0:
ans += 1
return ans
다른 사람의 풀이
from collections import deque
def check(string):
stack = []
for s in string:
if len(stack) == 0:
if s == ')' or s == '}' or s == ']':
return False
if s == '(' or s == '{' or s == '[':
stack.append(s)
else:
if s == ')' and stack[-1] == '(':
stack.pop()
elif s == '}' and stack[-1] == '{':
stack.pop()
elif s == ']' and stack[-1] == '[':
stack.pop()
if stack:
return False
else:
return True
def solution(s):
answer = 0
queue = deque(list(s))
i = 0
while i != len(queue):
if check(queue):
answer += 1
queue.rotate(-1)
i += 1
return answer
deque를 사용하여 끝값에 빠르게 접근
if len(stack) == 0:
if s == ')' or s == '}' or s == ']':
return False
예외 처리를 하여 코드 시간 단축
728x90
'Coding Test > programmers' 카테고리의 다른 글
[Python] 파이썬 프로그래머스 호텔 대실 (0) | 2023.02.08 |
---|---|
[Python] 파이썬 프로그래머스 위장 (0) | 2022.11.24 |
[Python] 파이썬 프로그래머스 구명보트 (0) | 2022.11.17 |
[Python] 파이썬 프로그래머스 정수 삼각형 (0) | 2022.11.14 |
[Python] 파이썬 프로그래머스 멀리 뛰기 (0) | 2022.11.06 |