기억은 짧고 기록은 길다
[프로그래머스/Programmers] 괄호 회전하기 - Python 본문
Link
코딩테스트 연습 - 괄호 회전하기
programmers.co.kr
Solution
시작에 앞서 필자의 풀이는 틀린 풀이이다. 필자는 예를 들어 '( [ ) ]'같은 경우도 True 인 경우라고 생각했으나 다른 풀이를 찾아보며 '( [ ) ]'인 경우는 False라는 것을 알게 되었다. 올바른 괄호의 경우 괄호가 엇갈리게 닫혀있는 경우는 제외한다.
def isCorrect(s):
if s[0] == ']' or s[0] == '}' or s[0] == ')':
return False
cnt = [0, 0, 0]
for i in range(len(s)):
if s[i] == '[':
cnt[0] += 1
elif s[i] == ']':
cnt[0] -= 1
elif s[i] == '{':
cnt[1] += 1
elif s[i] == '}':
cnt[1] -= 1
elif s[i] == '(':
cnt[2] += 1
elif s[i] == ')':
cnt[2] -= 1
if min(cnt) < 0:
return False
return cnt == [0, 0, 0]
def solution(s):
if len(s) % 2 == 1:
return 0
answer = 0
for i in range(len(s)):
answer += isCorrect(s[i:] + s[:i])
return answer
📌 Tip: a = 0 일 때 a += True -> a = 1
Other Solution
필자의 풀이는 틀린 풀이 이므로 해당 풀이를 참고바란다.
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
🔑 key point: stack
📌 Tip: queue.rotate(-1)'CodingTest > programmers' 카테고리의 다른 글
| [프로그래머스/Programmers] [1차] 캐시 - Python (0) | 2021.11.15 |
|---|---|
| [프로그래머스/Programmers] n진수 게임 - Python (0) | 2021.11.12 |
| [프로그래머스/Programmers] n^2 배열 자르기 - Python (1) | 2021.11.05 |
| [프로그래머스/Programmers] [3차] 파일명 정렬 - Python (0) | 2021.10.09 |
| [프로그래머스/Programmers] 수식 최대화 - Python (0) | 2021.10.08 |
Comments