문제
https://programmers.co.kr/learn/courses/30/lessons/60058
풀이
문제에서 요구하는 것을 잘 알아듣고 구현하는게 관건인 문제였다.
왜 저런 프로세스를 거치면 올바른 괄호 문자열이 되는 것인지 잘 이해가 안가서 예시를 써보며 이해했다.
어쨌거나 문제는 내가 직접 올바를 괄호 문자열을 만드는 로직을 짜는 것이 아니고 저 프로세스를 따라 구현하는 것이었어서 순서대로 함수를 작성했다.
def splitP(string):
pair = 0
for i, p in enumerate(string):
if p == '(':
pair += 1
else:
pair -= 1
if pair == 0:
return string[:i+1], string[i+1:]
return string, ''
def isCorrect(string):
pair = 0
for i, p in enumerate(string):
if p == '(':
pair += 1
else:
pair -= 1
if pair < 0:
return False
return True
def reverse(string):
result = ''
for s in string:
if s == '(':
result += ')'
else:
result += '('
return result
def process(p):
u, v = splitP(p)
processedV = process(v) if v != '' else ''
if isCorrect(u):
return u + processedV
else:
return '(' + processedV + ')' + reverse(u[1:-1])
def solution(p):
return process(p)
그냥 시키는대로 했더니 통과했다.
다만 splitP와 isCorrect 의 코드는 더 깔끔하게 합칠 수 있을 듯 싶다.
다른 사람의 풀이
def solution(p):
if p=='': return p
r=True; c=0
for i in range(len(p)):
if p[i]=='(': c-=1
else: c+=1
if c>0: r=False
if c==0:
if r:
return p[:i+1]+solution(p[i+1:])
else:
return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:'(' if x==')' else ')',p[1:i]) ))
u, v로 split 하기 위해 따로 반목문을 돌지 않고 p를 바로 잘라서 썼다.
또 4-4를 구현하기 위해 나는 reverse함수를 만들었는데 이분은 lambda와 map으로 짧게 푸셨다
'알고리즘 스터디 2021.07~' 카테고리의 다른 글
[프로그래머스] 2020 카카오 블라인드 - 외벽 점검 (0) | 2021.09.12 |
---|---|
[프로그래머스] 2019 카카오 블라인드 - 블록 게임 (0) | 2021.08.29 |
[프로그래머스] 2020 카카오 인턴십 - 키패드 누르기 (0) | 2021.08.10 |
[프로그래머스] 2018 카카오 블라인드 [1차] 뉴스 클러스터링 (0) | 2021.08.08 |
[프로그래머스] 2020 카카오 인턴십 수식 최대화 (0) | 2021.08.07 |