Algorithm/프로그래머스
[프로그래머스] Lv2 - 괄호 변환 (파이썬)
_temp
2022. 4. 1. 13:58
def solution(p):
# 1
if p == '':
return p
# 2
u, v = divide(p)
# 3
if check(u):
return u + solution(v)
# 4
else:
temp = '('+solution(v)+')'
for x in u[1:-1]:
if x == '(':
temp += ')'
else:
temp += '('
return temp
def divide(p):
left, right = 0, 0
for k in range(len(p)):
if p[k] == '(':
left += 1
else:
right += 1
if left == right:
return p[:k+1], p[k+1:]
def check(u):
q = []
for x in u:
if not q:
q.append(x)
else:
if x == ')' and q[-1] == '(':
q.pop()
else:
q.append(x)
if q:
return False
return True
2020 카카오 블라인드
1. 빈 문자열이면 리턴
2. divide : 왼쪽 괄호와 오른쪽 괄호의 수가 같아지는 지점으로 슬라이싱해서 반환 (u = 최초의 '균형 잡힌 괄호', v = 나머지)
3. check (스택을 이용해서 '올바른 괄호 문자열' 인지 아닌지 boolean값 반환)가 True라면
- v를 가지고 다시 재귀적으로 판단
- u와 위 결괏값을 합해서 반환
4. check가 False라면 (u가 올바른 괄호 문자열이 아니라면)
- ( + v를 재귀로 돌린 반환 값 + ) 에서
- u의 앞뒤 값을 제외한 값을 반전해서 더해주기
- 결괏값 반환
문제를 읽다가 이해하 안 되는 부분이 있어서 잠깐 막혔었다. v를 재귀적 처리하라는 부분이었다.
풀다가 어디선가 오류가 나와서 결국 VSCode로 옮겨서 디버깅하고 정답처리가 됐다.