반응형
※답을 찾으시는 분은 맨 밑을 보시면 됩니다.
문제설명
내 풀이식
시간제한 : 60:00
사용 시간 : 60:00
정답 유무 : 틀림
def solution(p):
answer = ''
while 1:
count_l = 0
count_r = 0
for i in range(0, len(p)):
if i == 0:
if p[i]=='(':
count_l += 1
else:
count_r += 1
else:
if count_l != count_r:
if p[i] == '(':
count_l += 1
else:
count_r += 1
else:
a = p[:i]
b = p[i:]
break
else:
a = p[:i+1]
b = p[i+1:]
if a == '()':
answer += a
a = ''
p = b
elif b == '()':
c = a[-3:-1]
answer += '(' + a[::-1][1:3] + ')' + b
break
else:
p = b
return answer
p = ")("
print(solution(p))
오답노트 :
1. 함수를 여러개 만들 생각을 못했다.
2. 재귀 함수에 대한 개념 부족
3.문제 설명을 그대로 따라가면서 하나씩 구현해보자.
다른 분의 풀이식
이 분 소스코드가 너무 깔끔하고 보기 쉽게 되어 있고 잘 짜여있다고 생각이 들어서 가져오게 되었다. 앞으로 코드를 이런식으로 짜야겠다. 밑에 출처를 남긴다.
# 문자열 w를 u, v로 분리하는 함수
def divide(w):
openP = 0
closeP = 0
for i in range(len(w)):
if w[i] == '(':
openP += 1
else:
closeP += 1
if openP == closeP:
return w[:i + 1], w[i + 1:]
# 문자열 u가 올바른 괄호 문자열인지 확인하는 함수
def isBalanced(u):
stack = []
for p in u:
if p == '(':
stack.append(p)
else:
if not stack:
return False
stack.pop()
return True
def solution(w):
# 과정 1
if not w:
return ""
# 과정 2
u, v = divide(w)
# 과정 3
if isBalanced(u):
# 과정 3-1
return u + solution(v)
# 과정 4
else:
# 과정 4-1
answer = '('
# 과정 4-2
answer += solution(v)
# 과정 4-3
answer += ')'
# 과정 4-4
for p in u[1:len(u) - 1]:
if p == '(':
answer += ')'
else:
answer += '('
# 과정 4-5
return answer
출처:
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm] 3 강 : 파이썬 문법 - 수 자료형 (0) | 2020.10.14 |
---|---|
[Algorithm] 2강 : 알고리즘 성능 평가란? (0) | 2020.10.13 |
[Algorithm] python문자열 압축(kakao 2020 프로그래머스) (0) | 2020.09.14 |
[Algorithm] 프로그래머스 K 번째 수 (0) | 2020.08.05 |
[Algorithm] 파이썬을 파이썬 답게 문법 사용하기(프로그래머스 참조) (0) | 2020.07.31 |