알고리즘

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

hminor 2023. 6. 15. 11:34
# deque를 가져와서 rotate를 사용함으로 회전을 편하게 할 수 있었음.

from collections import deque

def solution(s):
    l_s = len(s)
    if l_s%2: return 0
    q, cnt = deque(s), 0
    for _ in range(l_s):
        flag, stack = True, []
        for i in range(l_s):
            if q[i] in ['[', '{', '(']: stack = stack + [q[i]]
            else:
                if stack == []: 
                    flag = False
                    break
                else:
                    if (stack[-1] == '[' and q[i] == ']') or (stack[-1] == '{' and q[i] == '}') or (stack[-1] == '(' and q[i] == ')'): stack.pop()
                    else:
                        flag = False
                        break  
                    
        if flag and stack == []: cnt += 1
        q.rotate(-1)
    return cnt

 

 

# 오답

# Stack 형식으로 풀어야 되는데 이런 실수를 해버렸다.
# 이유는 바로 스택의 q의 바로 다음 요소만 비교하는게 아니라 그냥 언젠간 잘 닫히기만 하면 되기 때문.

from collections import deque
def solution(s):
    if len(s)%2: return 0
    q, cnt = deque(s), 0
    for _ in range(len(s)):
        flag = True
        for i in range(len(s)//2):
            if not ((q[i*2] == '[' and q[i*2+1] == ']') or (q[i*2] == '{' and q[i*2+1] == '}') or (q[i*2] == '(' and q[i*2+1] == ')')): 
                flag = False
                break
        if flag: cnt += 1
        q.rotate(-1)
    return cnt