괄호 회전하기
프로그래머스
이 문제는 괄호짝 검사 + 리스트 회전이 합쳐진 평범한 문제인데 대박적인것을 알아내었다.
나만 몰랐던 것 같긴 한데..ㅎㅎ
def check(k):
stack = []
for i in range(len(k)):
if k[i]=='[' or k[i]=='(' or k[i]=='{':
stack.append(k[i])
elif k[i]==']':
if (len(stack) == 0) or (stack and stack.pop()!='['):
return False
elif k[i]==')':
if (len(stack) == 0) or (stack and stack.pop()!='('):
return False
elif k[i]=='}':
if (len(stack) == 0) or (stack and stack.pop()!='{'):
return False
if stack:
return False
return True
def solution(s):
cnt = 0
s = list(s)
for i in range(len(s)):
s.append(s.pop(0))
if check(s):
cnt += 1
return cnt
우선 나는 이렇게 문자열 s를 리스트화 시켜서 첫번째 원소를 pop하고 리스트 뒤에 붙여주고 check함수를 통해 괄호짝이 잘 맞는지를 검사하도록 코드를 작성하였다.
그러나 deque에는 rotate라는 메소드가 있었고,
deque.rotate(파라미터) 로 사용하는데 파라미터 값이 음수이면 왼쪽으로 회전, 양수이면 오른쪽으로 회전한다.
만약 한번 회전이 아니라 여러번 회전이면 rotate메소드가 정말 유용할 것 같다!
from collections import deque
def check(k):
stack = []
for i in range(len(k)):
if k[i]=='[' or k[i]=='(' or k[i]=='{':
stack.append(k[i])
elif k[i]==']':
if (len(stack) == 0) or (stack and stack.pop()!='['):
return False
elif k[i]==')':
if (len(stack) == 0) or (stack and stack.pop()!='('):
return False
elif k[i]=='}':
if (len(stack) == 0) or (stack and stack.pop()!='{'):
return False
if stack:
return False
return True
def solution(s):
cnt = 0
s = deque(s)
for i in range(len(s)):
s.rotate(-1)
if check(s):
cnt += 1
return cnt
deque은 popleft, appendleft만 알았는데 rotate도 있었다니.. 새로운 것을 알게 되어서 뒤통수 맞은 것 같기도 하고 기분이 좋기도 하고..그렇다.😅
아 그리고 문자열은 pop, append를 지원하지 않으니 꼭 리스트나 덱 자료형으로 바꾸는 것 주의!
Author And Source
이 문제에 관하여(괄호 회전하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sezeom/괄호-회전하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)