728x90
📌 문제
https://programmers.co.kr/learn/courses/30/lessons/60058
📌 문제 접근 방법
- 스택을 활용하여 올바른 괄호열을 판단하는 함수를 만들었다.
- 여는 괄호를 만나면 스택 안에 넣는다.
- 닫는 괄호를 만나면 스택에서 괄호 하나를 pop 한다.
- 문자열이 끝나지 않았는데 스택에서 pop을 할 수 없거나, 문자열이 끝났는데 스택에 남는 괄호가 있다면 올바른 괄호열이 될 수 없다.
- 그 후에는 문제에서 주어진 방식을 그대로 따라서 변환할 수 있도록 함수를 짰다.
📌 코드
def is_correct(string):
stack = []
for s in string:
if s == '(':
stack.append(s)
else:
if not stack:
return False
stack.pop()
if stack:
return False
return True
def solution(p):
if is_correct(p):
return p
answer = ''
def change_correct(string):
nonlocal answer
if not string:
return string
u = [string[0]]
v = []
for i in range(1, len(string)):
if u.count('(') == u.count(')'):
v = string[i:]
break
else:
u.append(string[i])
if is_correct(u):
answer += ''.join(u)
change_correct(''.join(v))
else:
answer += '('
change_correct(''.join(v))
answer += ')'
for i in range(1, len(u)-1):
if u[i] == '(':
answer += ')'
else:
answer += '('
change_correct(p)
return answer
728x90
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[PG/Python] 큰 수 만들기 (0) | 2021.12.02 |
---|---|
[PG/Python] 멀쩡한 사각형 (0) | 2021.12.01 |
[PG/Python] 수식 최대화 (0) | 2021.11.14 |
[PG/Python] 전력망을 둘로 나누기 (0) | 2021.11.14 |
[PG/Python] 타겟 넘버 (0) | 2021.11.04 |
댓글