문제 설명
매개변수 설명
입출력 예
로직설명
1. 균형잡힌 괄호문자열, 올바른 괄호 문자열 확인하는 함수를 만들고
2. 1~4번까지 구현하기.. (다른 사람들은 차례대로 구현하면 되는 문제라 어렵지 않다고 하셨는데 난 어려웠다,,,)
코드
# 균형잡힌 괄호 문자열
def balance(p):
cnt = 0
for i in p:
if i == '(':
cnt += 1
else:
cnt -= 1
if cnt == 0:
return True
return False
# 올바른 괄호문자열
def correct(p):
left = 0
right = 0
for i in p:
if i == '(':
left += 1
else:
right += 1
if right > left:
return False
if right == left:
return True
else:
return False
def makeuv(p):
u = ''
v = ''
for i in range(len(p)):
if balance(p[:i+1]):
u += p[:i+1]
v += p[i+1:]
break
return u, v
def problem(p):
# 1번
if p == '':
return ''
# 2번
u, v = makeuv(p) # u=(()()) v=)(
# 3번
temp = ''
if correct(u): # 3-1에서 시간 많이 걸림,,
u += problem(v)
return u
# 4번
else:
# temp += '(' + problem(v) + ')' + u[1:-1][::-1]
temp += '(' + problem(v) + ')' # ')' -> '(' 와 '(' -> ')' 로 변환하라는 뜻
uu = u[1:-1]
for i in uu:
if i == '(':
temp += ')'
else:
temp += '('
'''
p = "()))((()" 일때, temp = (())()로 잘 나오는데,
맨 처음 기존의 u+temp가 되어야 정답인데
'''
return temp
def solution(p):
if correct(p):
return p
else:
res = problem(p)
return res
주의해야하는 부분
1. 4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.
=> ')' -> '(' 와 '(' -> ')' 로 변환하라는 뜻
=> u[1:-1][::-1] 이렇게 하니까 테케 12~ 거의 마지막 테케 전인가?까지 에러났다.
2. p = "()))((()" 일때, temp = (())()로 잘 나오는데, 정답은 맨 처음 기존의 u+temp가 되어야 하는데, 답이 자꾸 ((())())이렇게 나왔다..
=> 용어정리부분에서 1,2,3,4번이 있는데, u=(), v=))((()이면 3번으로가서 v에 대해서 처음부터 진행한다.
=> v가 다시 u=))(( v=()로 나뉘는데 이때 u가 올바른 괄호문자열이 아니라서 4번을 가야한다
=> 그리고나서 다시 3번으로 가서 ()[기존에 수행한 결과] + temp를 반환
* 문제점 : 마지막 =>에서 3번으로 가야하는데 4번으로 감 -> correct함수가 이상하게 되어있었음
'알고리즘' 카테고리의 다른 글
[baekjoon] 7576. 토마토 (0) | 2020.06.29 |
---|---|
[programmers] 크레인 인형뽑기 게임 (0) | 2020.06.27 |
[baekjoon] 2468. 안전 영역 (0) | 2020.06.25 |
[baekjoon] 2667. 단지 내 수 세기 (0) | 2020.06.25 |
[programmers] 문자열 압축 (0) | 2020.06.24 |