프로그래머스/Python
[프로그래머스] 괄호 회전하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 7. 14. 16:23
728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
- 빠른 연산에 용이한 deque 자료구조를 사용하기 위해 deque 모듈을 불러온다. from collections import deque
- 괄호를 회전한 결과를 저장할 deque을 생성한다. queue = deque()
- 초기 괄호의 상태를 deque 자료구조로 추가한다. queue.append(deque(s))
- 다음부터 괄호 길이 전까지 for _ in range(1, len(s))
- 문자열을 deque 자료구조로 저장한다. s = deque(s)
- 문자열에서 가장 앞 괄호를 제거하고 제거한 괄호를 맨 뒤에 추가한다. s.append(s.popleft())
- 괄호를 회전한 결과를 추가한다. queue.append(s)
- 괄호를 회전한 결과를 모두 저장했으면 저장한 결과를 하나씩 추출하여 올바른 괄호인지 확인한다. for i in queue
- 올바른 괄호를 판별하기 위해 사용할 deque을 생성한다. stack = deque()
- 올바른 괄호인지 나타낼 변수를 생성하고 초기화한다. state = True
- 괄호를 하나씩 추출하여 for j in i
- 만약 여는 괄호이면 if (j == '(' or j == '{' or j == '[')
- stack에 추가한다. stack.append(j)
- 반면에 닫는 괄호일 경우 else
- stack이 공백이 아니면 if (len(stack) > 0)
- stack에서 가장 마지막 원소를 삭제하고 삭제한 값이 닫는 괄호와 동일한 종류의 여는 괄호이면 if (j == ')' and stack.pop() == '(') or (j == '}' and stack.pop() == '{') or (j == ']' and stack.pop() == '[')
- 아직까진 올바른 괄호이다. state = True
- 동일한 여는 괄호가 아니면 else
- 올바른 괄호가 아니므로 틀림을 나타내고 종료한다. state = False break
- 반면에 stack이 공백이면 else
- 올바른 괄호가 아니므로 틀림을 나타내고 종료한다. state = False break
- 괄호 판별이 끝나고, 올바른 괄호이며 stack이 공백으로 끝나면 if (state and len(stack) == 0)
- 올바른 괄호 횟수에 1을 더한다. answer += 1
반응형
3. 소스코드
from collections import deque
def solution(s):
answer = 0
queue = deque()
queue.append(deque(s))
for _ in range(1, len(s)):
s = deque(s)
s.append(s.popleft())
queue.append(s)
for i in queue:
stack = deque()
state = True
for j in i:
if (j == '(' or j == '{' or j == '['):
stack.append(j)
else:
if (len(stack) > 0):
if (j == ')' and stack.pop() == '(') or (j == '}' and stack.pop() == '{') or (j == ']' and stack.pop() == '['):
state = True
else:
state = False
break
else:
state = False
break
if (state and len(stack) == 0):
answer += 1
return answer
728x90
반응형