Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[프로그래머스] Lv.2 괄호 변환 [Python, 파이썬] KAKAO 본문
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/60058
- 🔑 설명 그대로 구현하는 것?
- 올바른 괄호 검사와 u, v를 나누는 코드는 함수로 따로 빼는 게 보기 편하다.
- 그리고 설명대로 코드 짜면 되는데 설명 이해하기가 굉장히 어려웠음,,
def check(p): # 올바른 괄호일까?
if p[0] == ')':
return False
else:
stack = [0] * len(p)
k = -1
for i in p:
if i == '(':
k += 1
stack[k] = '('
elif stack[k] == '(' and i == ')':
k -= 1
else:
return False
return True
def make_uv(p): # u, v를 만들자
o, c = 0, 0
u = ""
for i in p:
if i == '(':
o += 1
u += i
else:
c += 1
u += i
if o == c:
v = p[o+c:]
return u, v
def solution(p):
answer = ''
if not p or check(p): # 1. 빈 문자열 or 처음 부터 올바른 괄호면 바로 리턴
return p
u, v = make_uv(p) # 2. u, v 분리
if check(u): # 3. u가 올바른 괄호면 v를 1번으로 보내
return u + solution(v) # 3-1. u에 solution(v)의 수행 결과를 붙이고 반환
else: # 4. u가 올바른 괄호가 아니라면
answer = '(' + solution(v) + ')' # 4-1 ~ 4-3. 과정 수행
u = u[1:-1] # 4-4. 첫 번째, 마지막 문자 제거
for i in u: # 4-4. 괄호 방향 뒤집어
if i == '(':
answer += ')'
else:
answer += '('
return answer # 4-5. 생성된 문자열 반환
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 삼각 달팽이 [Python, 파이썬] (0) | 2023.10.12 |
---|---|
[프로그래머스] Lv.2 수식 최대화 [Python, 파이썬] KAKAO (0) | 2023.10.11 |
[프로그래머스] Lv.3 징검다리 건너기 [Python, 파이썬] KAKAO (0) | 2023.10.09 |
[프로그래머스] Lv.1 키패드 누르기 [Python, 파이썬] KAKAO (1) | 2023.10.09 |
[프로그래머스] Lv.2 [3차] 방금그곡 [Python, 파이썬] KAKAO (1) | 2023.10.08 |
Comments