문제 : https://programmers.co.kr/learn/courses/30/lessons/60058?language=python3
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
문제가 너무 길어서 핵심만 적어 놓고 링크로 대체 한다.
이 문제는 무려 코딩 양식이 있다.
하지만 문제를 굉장히 이해하기 어려워서 풀기 쉽지 않다.
핵심 부분은 크게 2가지다.
u에 올바른 문자열이 왔을 때와 균형 잡힌 문자열이 왔을 때 두 가지만 생각하면 된다.
u = "( )", v = ") ) ( ( ( )"
u가 올바른 문자열이니 u + function(v)
u = ") ) ( (", v = "( )"
u가 균형 잡힌 문자열이니 "(" + function(v) + ")" + change(u)
(이 부분의 function과 change의 위치를 헷갈려서 코드를 다 지우고 다시 짰다;)
make_v부분이 순차적으로 코딩 양식을 따라 작성한 부분이다.
테스트 케이스로 ")()()()(" -> "(((())))" 사용하는 것을 추천한다.
def convert_u(u):
result = ''
for i in u[1:-1]:
if i == '(':
result += ')'
else:
result += '('
return result
def make_v(w):
if not w:
return ''
opener = 0
closer = 0
flag = 0
for i in range(1, len(w) + 1):
if w[i - 1] == '(':
opener += 1
else:
closer += 1
if opener < closer:
flag = 1
if opener != 0 and opener == closer:
if flag == 1:
u = w[:i]
v = w[i:]
return '(' + make_v(v) + ')' + convert_u(u)
else:
u = w[:i]
v = w[i:]
return u + make_v(v)
def solution(p):
answer = make_v(p)
return answer
'Algorithm' 카테고리의 다른 글
프로그래머스) 파일명 정렬 (0) | 2022.05.23 |
---|---|
python) 정렬에 lambda함수 활용하기 (0) | 2022.05.23 |
python) deepcopy와 [:](슬라이싱) 차이 (0) | 2022.05.21 |
LeetCode) subsets (0) | 2022.05.21 |
백준) 단지번호붙이기 (0) | 2022.05.19 |