[프로그래머스 | 파이썬] 괄호 변환

devheyrin·2022년 6월 21일
0

codingtest

목록 보기
62/65

문제 링크

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

코드

def solution(p):
    answer = ''
    if not p:
        return ''
    if isWrite(p):
        return p
    
    u, v = seperate(p)

    if isWrite(u):
        return u + solution(v)
    else:
        answer += '('
        answer += solution(v)
        answer += ')'
        if u:
            u = u[1:-1]
            answer += ''.join(reverse(u))
    
    return answer

def isWrite(w):
    arr = [w[0]]
    w = list(w)
    i = 1
    while True:
        if i >= len(w):
            break
        if arr and w[i] == ')' and arr[-1] == '(': 
            arr.pop()
        else:
            arr.append(w[i])
        i += 1
    if not arr:
        return True
    return False
      

def reverse(w):
    r = {"(":")", ")":"("}
    return [r[s] for s in w]

def seperate(w):
    w = list(w)
    u = ''
    v = ''
    left_cnt = 0
    right_cnt = 0
    i = 0
    while True:
        if i >= len(w): break
        if w[i] == '(': left_cnt += 1
        if w[i] == ')': right_cnt += 1
        u += w[i]
        if left_cnt == right_cnt: break
        i += 1
 
    v = ''.join(w[i+1:])
    return u, v

풀이 설명

풀었는데 꺼림칙한 문제...
역시나 첫 시도에서는 실패가 떴다.
이유는 괄호를 '뒤집으라'는 말을 u[::-1] 로 이해해서였다.
( 는 ) 로, ) 는 ( 로 '괄호를' 뒤집으라는 말임을 깨닫고 수정해주었다.

profile
개발자 헤이린

0개의 댓글