알고리즘/이것이 코딩테스트다
18_괄호 변환
happenundo
2024. 2. 6. 17:17
728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
DFS 문제 같이 생겼지만, DFS 문제는 아니고 재귀를 사용한 구현 문제다.
문제를 잘 이해하지 못해서, 풀지 못했다.
풀이를 보니 굉장히 쉽고, 문제만 이해한다면 구현할 수 있는 문제라는 생각이 들었다.
문제를 많이 풀어서 구현력을 키우자.
다시 풀어야 할 문제
풀이 코드
# 괄호 변환
# '균형 잡힌 괄호 문자열'의 인덱스 반환
def balanced_index(p):
count = 0 # 왼쪽 괄호의 개수
for i in range(len(p)):
if p[i] == '(':
count += 1
else:
count -= 1
if count == 0:
return i
# '올바른 괄호 문자열'인지 판단
def check_proper(p):
count = 0 # 왼쪽 괄호의 개수
for i in p:
if i == '(':
count += 1
else:
if count == 0: # 쌍이 맞지 않는 경우 False 반환
return False
count -= 1
return True # 쌍이 맞는 경우에 True 반환
def solution(p):
answer = ''
if p == '':
return answer
index = balanced_index(p)
u = p[:index + 1]
v = p[index + 1:]
# '올바른 괄호 문자열'이면, v에 대해 함수를 수행한 결과를 붙여 반환
if check_proper(u):
answer = u + solution(v)
# '올바른 괄호 문자열'이 아니라면 아래의 과정을 수행
else:
answer = '('
answer += solution(v)
answer += ')'
u = list(u[1:-1]) # 첫번째와 마지막 문자를 제거
for i in range(len(u)):
if u[i] == '(':
u[i] = ')'
else:
u[i] = '('
answer += "".join(u)
return answer
728x90