코딩테스트

[프로그래머스/LEVEL 2/파이썬] 괄호 회전하기

Sun0727 2022. 6. 27. 17:42

#문제링크

https://programmers.co.kr/learn/courses/30/lessons/76502

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

#나의풀이

def solution(s):
    answer = 0
    _str = s
    
    for i in range(len(s)):
        stack = []
        
        for char in _str:
            if len(stack) == 0:
                stack.append(char)
            else:
                if char == '{' or char == '[' or char == '(':
                    stack.append(char)
                elif char == '}':
                    if stack[-1] == '{':
                        stack.pop()
                    else:
                        break
                elif char == ']':
                    if stack[-1] == '[':
                        stack.pop()
                    else:
                        break
                elif char == ')':
                    if stack[-1] == '(':
                        stack.pop()
                    else:
                        break
        else:
            if len(stack) == 0:
                answer += 1
                
        _str = _str[1:] + _str[0]
        
    return answer

#해설

제목을 괄호 회전하기이지만 실 내용은 제대로된 괄호 사용이 주인 문제인거 같다.

 

먼저 문자열을 _str 변수에 담았다. 문자열을 계속 한칸씩 옮겨줘야 해서 했는데 해설 쓰면서 보니까 굳이 이럴 필요가 없는거 같다. 다른분들은 s를 그냥 이용하시면 될꺼 같다.

 

요구사항에 맞게 s길이만큼 반복 시켰다. 이후 stack을 만들었다. 괄화는 {, [. ( 넣어주고 }, ], )을 만나면 조건에 맞는지 확인후 pop해서 빼줄것이다.

 

문자열의 문자 한개씩 접근한다. stack이 비었다면 그냥 넣어주고 아닐경우 조건에 맞게 행동을 취해준다. {, [, (은 그냥 넣어주면 되고 }, ], )은 스택에 마지막이 자신의 짝과 맞는지 확인하고 맞다면 pop으로 빼주고 아니면 break를 해줘서 반복문을 끝내버린다.

 

반복문이 모두 돌았고 stack이 전부 비었으면 맞는 괄호식이므로 answer을 1증가 시켜준다.

이후 0번째 인덱스가 마지막으로 가야하므로 1번째 인덱스부터 끝까지와 0번쨰인덱스를 더해서 옮기는걸 표현했다