[프로그래머스] 괄호 회전하기

이정연·2023년 4월 26일
0

CodingTest

목록 보기
154/165

문제 링크

과정 설계

solution

def solution(s):
    answer = 0
    s = deque(s)
    for _ in range(len(s)-1):
        answer += check(s)
        s.append(s.popleft())
    return answer
  1. 문자열 ➡️ 큐
  2. 큐가 올바른 괄호 시퀀스인지 검사
  3. 맞다면 answer 증가
  4. 큐 회전

check

큐가 올바른 괄호 시퀀스인지 검사하는 함수
input: 큐
output: Boolean

def check(s):
    q = deque([x for x in s])
    stack = []
    pair = {']':'[', '}':'{', ')':'('}
    while q:
        cur = q.popleft()
        if cur in pair and stack and stack[-1] == pair[cur]:
            stack.pop()
        else:
            stack.append(cur)
    if stack:
        return 0
    return 1
  1. 닫는 괄호가 나오면 스택 마지막을 확인
  2. 스택 마지막이 닫는 괄호와 쌍이 맞으면 pop
  3. 1,2번이 아니라면 스택에 추가
  4. 최종적으로 스택이 비었다면 올바른 괄호 시퀀스
  5. 스택에 괄호가 1개라도 남아있다면 틀린 괄호 시퀀스

파라미터 s를 그대로 사용하지 않고 q로 재할당 해준 이유는 아래 포스팅을 참고

https://velog.io/@happyyeon/Python-깊은-복사-얕은-복사

CODE

from collections import deque
def check(s):
    q = deque([x for x in s])
    stack = []
    pair = {']':'[', '}':'{', ')':'('}
    while q:
        cur = q.popleft()
        if cur in pair and stack and stack[-1] == pair[cur]:
            stack.pop()
        else:
            stack.append(cur)
    if stack:
        return 0
    return 1
            
def solution(s):
    answer = 0
    s = deque(s)
    for _ in range(len(s)-1):
        answer += check(s)
        s.append(s.popleft())
    return answer
profile
0x68656C6C6F21

0개의 댓글