업데이트:

최대 1 분 소요

문제

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

P_76502.png

풀이

deque를 통해 문자열을 회전시켜주며 올바른 괄호인지 검사한다.

검사 과정은 내부 괄호를 고려해서 deque안에 넣어둔 괄호들을 하나씩 빼서 새로운 stack에 넣어주며 stack의 head와 deque에서 뽑아낸 괄호가 올바른 괄호인지 판단하여 올바른 괄호라면 stack에서 빼내어주고, 아니라면 stack에 유지시킨다.

이 때 stack이 비어있으면 비교할 대상이 없기 때문에 비어있는 경우에는 미리 append 시켜준다.

def solution(s):
    from collections import deque
    from copy import deepcopy
    s = deque(list(s))
    answer = 0

    def check(s):
        lst = deepcopy(s)
        tmp = [lst.popleft()]
        while lst:
            if lst:
                l = lst.popleft()
                if not tmp:
                    tmp.append(l)
                    continue
                if ord(l)== ord(tmp[-1])+2 or ord(l) == ord(tmp[-1])+1:
                    tmp.pop()
                else:
                    tmp.append(l)
            
        if not tmp:
            return True
        else:
            return False
        
    for i in range(len(s)):
        if check(s):
            answer+=1
        s.rotate(-1)
return answer

생각 & 정리

예전에 접한 개발자 유튜브에서 if와 같은 조건문은 되도록 자제하는 것이 좋다고 한 말을 들은적이 있다.
물론 이 정도의 알고리즘 문제에서 고려할 문제는 전혀 아니겠지만 항상 if문이 꽤 필요할 것 같다고 생각되는 때에 l == ‘[’ 와 같이 직관적인게 좋은 것인지 if문을 하나라도 줄여보고자 아스키코드로 바꾸는 것이 좋은지 생각이 들었다.

현업에 들어가게 되면 이 의문점이 풀릴 것이라고 생각이 들지만, 왠지 그에 대한 대답은 “딱히 상관 없다.” 와 같이 허무한 답변이 오지않을까하는 생각이 들었다.

댓글남기기