취준생의 코딩테스트 연습기

[프로그래머스] 괄호 회전하기 / 파이썬(python) 본문

코딩테스트/프로그래머스

[프로그래머스] 괄호 회전하기 / 파이썬(python)

Jiwon_C 2021. 4. 19. 23:41

# 문제 링크

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

 

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

 

programmers.co.kr

# Soultion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from collections import deque
def solution(s):
    str = deque(s)
    answer = 0
    
    for j in range(len(str)):
        stack = []
        for i in str:
            if i=='(' or i=='{' or i=='[':
                stack.append(i)
            elif not stack:
                stack.append('-')
                break
            elif i==')' and stack[-1]!='(':
                stack.append('-')
                break
            elif i=='}' and stack[-1]!='{':
                stack.append('-')
                break
            elif i==']' and stack[-1]!='[':
                stack.append('-')
                break
            else:
                stack.pop()
        if len(stack)==0:
            answer+=1
            
        str.append(str.popleft())
    
    
    return answer
cs
 

1. 스택에 저장된 맨앞의 요소를 뽑아내기위해 deque를 불러왔다.

3. 원래 문자열을 deque로 변환해준다.

4. 카운팅을 세기위한 변수

6. 문자열의 길이만큼 회전을 시키기위한 for문

7. 괄호가 제대로 표현이 되어있는지 확인하기위한 스택이다.

8. 문자열을 앞에서부터 한개씩 확인한다.

9. 여는 괄호이면 스택에 저장해준다.

11. 닫는 문자열이 나왔는데 스택이 비어있으면 바로 종료한다.

14~20. 닫는 문자열이면 stack에 담겨있는 맨위에 괄호와 일치하는지 확인한다.

23. 나머지 경우는 정상이므로 stack에 있는 top을 꺼내준다.

25. for문을 다 돌고난 뒤, 스택이 비어있으면 괄호가 올바르게 표현된것이므로 answer에 +1을 해준다.

28. 문자열을 회전시키기위한 코드이다. deque에 있는 popleft()함수를 이용하여 간단하게 표현했다. 

Comments