728x90
문제주소 : programmers.co.kr/learn/courses/30/lessons/60058
난이도 : Level2
문제
- 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다.
수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다.
풀이 : 주어진 시나리오대로 구성 잘라서 확인하고 붙이고 자르고 남은거 재귀 함수돌리고 반복
답안
def swap(p):
resultStr = ""
for i in range(0, len(p)):
if p[i] == '(':
resultStr += ')'
else:
resultStr += '('
return resultStr
def right(p):
nLCnt = 0
nRCnt = 0
for i in range(0, len(p)):
if p[i] == '(':
nLCnt += 1
else:
nRCnt += 1
if nLCnt < nRCnt:
return -1
else:
return 0
def solution(p):
answer = ''
if p == '':
return answer
nLCnt = 0
nRCnt = 0
for i in range(0, len(p)):
if p[i] == '(':
nLCnt += 1
else:
nRCnt += 1
if nLCnt == nRCnt:
u = p[:i+1]
v = p[i+1:len(p)]
if right(u) == 0:
answer = answer+u
answer = answer+solution(v)
else:
temp = '(' + solution(v) + ')'
u = u[1:len(u)-1]
answer = answer+temp+str(swap(u))
break
return answer
# print(solution('(()())()'))
# print(solution(')('))
print(solution('()))((()'))
# "(()())()" "(()())()"
# ")(" "()"
# "()))((()" "()(())()"
느낀점
더보기
처음에 풀다가 답답해서 vscode로 옮겨서 디버깅하며 푼문제
생각보다 쉽고 빠르게 풀었지만 디버깅이 어려운 이 프로그래머스에서만 풀었더라면 훨씬 더 걸렸을 것 같다
문제가 복잡해서 주어진 시나리오 그대로 쭈욱 수도코드 식으로 짜보며 진행했더니 별 어려움이 없었다
생각보다 쉽고 빠르게 풀었지만 디버깅이 어려운 이 프로그래머스에서만 풀었더라면 훨씬 더 걸렸을 것 같다
문제가 복잡해서 주어진 시나리오 그대로 쭈욱 수도코드 식으로 짜보며 진행했더니 별 어려움이 없었다
728x90
'운동하는 개발자 > 알고리즘, 코딩테스트' 카테고리의 다른 글
HackerRank [Strings] Sherlock and Anagrams /알고리즘 해커랭크 (0) | 2021.04.25 |
---|---|
HackerRank [String] Caesar Cipher /알고리즘 해커랭크 (0) | 2021.04.23 |
programmers [level2] 스킬트리 /알고리즘 프로그래머스 (0) | 2021.03.27 |
programmers [level2] 프린터 /알고리즘 프로그래머스 (0) | 2021.03.25 |
programmers [level2] 다리를 지나는 트럭 /알고리즘 프로그래머스 (0) | 2021.03.24 |