반응형
https://programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환 | 프로그래머스
카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 콘은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는
programmers.co.kr


2020 카카오 공채 응시할 때, 전반적으로 문제 난이도가 너무 어려워서 멘붕하는 바람에 제대로 못 푼 문제..
사실, 문제 요구사항만 제대로 이해하고 별 생각 없이 코드로만 옮겨도 풀리는 문제였다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 2. 문자열 w를 균형잡힌 괄호 문자열로 구분하는 함수. | |
# 균형잡힌 괄호 문자열이 만들어지는 index를 반환한다. | |
def balanced(p): | |
num = 0 | |
temp = [] | |
for idx, value in enumerate(p): | |
if value == ")": | |
num -=1 | |
if value == "(": | |
num +=1 | |
if num == 0: | |
return idx | |
# 3. 올바른 괄호 문자열인지 확인하는 함수 | |
def is_right(string): | |
temp = [] | |
for i in string: | |
if i == "(": | |
temp.append(i) | |
else: | |
if len(temp) == 0: | |
return False | |
temp.pop() | |
if len(temp) != 0: | |
return False | |
return True | |
def solution(p): | |
# 1. 빈 문자열이거나 문자열 전체가 올바른 괄호 문자열.. 그대로 반환한다. | |
if p == "" or is_right(p): return p | |
# 2. 문자열 w를 균형잡힌 괄호 문자열로 분리한다. | |
u, v = p[:balanced(p)+1], p[balanced(p)+1:] | |
# 3. 문자열 u가 올바른 괄호 문자열일 경우 | |
if is_right(u): | |
# 3. 문자열 v를 1단계부터 수행 | |
string = solution(v) | |
# 수행한 결과를 u에 이어붙여 반환한다. | |
return u + string | |
# 4. 올바른 괄호 문자열이 아닌 경우 | |
else: | |
# 4.1 첫 번째 문자열 ( | |
t = "(" | |
# 4.2 v를 재귀적으로 수행한 결과를 이어붙인다 | |
t += solution(v) | |
# 4.3 | |
t += ")" | |
# 4.4 u의 맨 앞과 뒷문자 제거하고, | |
u = list(u[1:-1]) | |
# 나머지 문자열의 괄호 방향을 뒤집는다. | |
for i in range(len(u)): | |
if u[i] == '(': | |
u[i] = ")" | |
elif u[i] == ")": | |
u[i] = "(" | |
t += "".join(u) | |
# 생성된 문자열을 반환한다. | |
return t |
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스. 등굣길 (Level 3) (0) | 2019.11.23 |
---|---|
[Python] 백준 14499. 주사위 굴리기 (0) | 2019.11.21 |
[Python] 백준 14888. 연산자 끼워넣기 (0) | 2019.11.19 |
[Python] 프로그래머스. 최고의 집합 (Level 3) (0) | 2019.11.18 |
[Python] 백준 16234. 인구 이동 (0) | 2019.11.17 |