프로그래머스 괄호 회전하기 코드 및 해설 (파이썬)
2021. 4. 26. 14:44ㆍalgorithm
반응형
programmers.co.kr/learn/courses/30/lessons/76502
💡 stack을 이용해 올바른 괄호인지 아닌지 판단했습니다.
우선 소괄호, 중괄호, 대괄호가 섞여 있는 string을 입력으로 받아 올바른 괄호인지 아닌지 판단하는 is_correct 함수를 정의했습니다. 닫는 괄호를 key, 그에 상응하는 여는 괄호는 value로 갖는 parenthesis라는 딕셔너리를 만들고,
(1) input의 시작이 닫는 괄호면 바로 False를 반환하도록 했습니다.
(2) 그 외의 경우엔 stack을 만들어 input의 하나씩 받으면서
(2-1) 닫는 괄호고 stack에 pop할 것이 있는 경우, 현재의 닫는 괄호와 대응하는 여는 괄호가 stack의 마지막에 있으면 for loop를 이어가고, 아니면 바로 False를 반환하게 했습니다.
(2-2) 그 외에 여는 괄호거나 stack이 비어 있는 경우 현재 괄호를 stack에 append했습니다.
최종적으로 stack이 비어 있으면 True, 아니면 False를 반환하도록 했습니다.
solution 함수에선 0 ~ len(s) -1 까지 왼쪽으로 회전시키면서 is_correct에서 True를 반환한 경우 answer를 1씩 증가시키도록 했습니다.
def is_correct(s):
parenthesis = {')':'(', '}':'{', ']':'['}
# 첫 시작이 닫는 괄호면 False
if s[0] in parenthesis.keys():
return False
else:
stack = []
for element in s:
# 닫는 괄호고 stack에 pop할 것이 있는 경우
if element in parenthesis.keys() and stack:
if parenthesis[element] != stack.pop():
return False
# 여는 괄호 또는 stack이 비어있는 경우
else:
stack.append(element)
# stack이 비어 있으면 True, 아니면 False
return True if not stack else False
def solution(s):
answer = 0
for i in range(len(s)):
# 0 ~ len(s)-1 까지 회전시키기
if is_correct(s[i:] + s[:i]):
answer += 1
return answer
반응형
'algorithm' 카테고리의 다른 글
프로그래머스 베스트앨범 코드 및 해설 (파이썬) (0) | 2021.04.27 |
---|---|
프로그래머스 영어 끝말잇기 코드 및 해설 (파이썬) (0) | 2021.04.26 |
프로그래머스 더 맵게 코드 및 해설 (파이썬) (0) | 2021.04.25 |
프로그래머스 방문 길이 코드 및 해설 (파이썬) (0) | 2021.04.21 |
프로그래머스 괄호 변환 코드 및 해설 (파이썬) (0) | 2021.04.20 |