728x90
https://programmers.co.kr/learn/courses/30/lessons/60058
문제 풀이
재귀와 문자열의 이해를 묻는 문제였다.
주어진 절차 그대로 해결하면 된다.
def isCorrect(str):
test = []
for element in str:
if len(test) == 0: test.append(element)
elif test[-1] == '(' and element == ')': test.pop()
else: test.append(element)
return True if len(test) == 0 else False
주어진 문자열이 올바른 문자열인지 확인하는 함수이다. 스택의 원리를 이용한다!
def seperateStr(str):
l = r = 0
for i in range(len(str)):
if str[i] == '(': l +=1
else: r+=1
if l == r:
return str[:i+1], str[i+1:]
문자열을 u, v로 두 개로 나누는 함수이다.
균형 잡힌 문자열이 되는 index를 찾아 2개의 문자열을 반환한다.
나머지는 주어진 절차 그대로 따라간다.
느낀 점
그렇게 어렵지는 않았다. 문자열을 다룰 수 있고 재귀를 이해하는지 물어보는 문제였다. 딱 이 정도는 기분 좋게 풀 수 있을 것 같다.
코드
def isCorrect(str):
test = []
for element in str:
if len(test) == 0: test.append(element)
elif test[-1] == '(' and element == ')': test.pop()
else: test.append(element)
return True if len(test) == 0 else False
def seperateStr(str):
l = r = 0
for i in range(len(str)):
if str[i] == '(': l +=1
else: r+=1
if l == r:
return str[:i+1], str[i+1:]
def reverseStr(str):
tmp = ''
for ch in str:
if ch == ')': tmp += '('
else: tmp += ')'
return tmp
def solution(p):
answer = ''
if isCorrect(p): answer += p
else:
u, v = seperateStr(p)
if isCorrect(u):
u += solution(v)
answer += u
else:
u = reverseStr(u[1:len(u)-1])
tmp = '(' + solution(v) + ')' + u
answer += tmp
return answer
'문제 풀이 > 프로그래머스 (Programmers)' 카테고리의 다른 글
[Python] 프로그래머스 : 수식 최대화 (0) | 2022.06.30 |
---|---|
[Python] 프로그래머스 : 거리두기 확인하기 (0) | 2022.06.26 |
[Python] 프로그래머스 : 메뉴 리뉴얼 (0) | 2022.06.22 |
[Python] 프로그래머스 : 내적 (0) | 2022.06.22 |
[Python] 프로그래머스 : 음양 더하기 (0) | 2022.06.22 |
댓글