728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
풀이
문제를 풀기위해 먼저 두가지 함수를 만들었다.
1. 올바른 괄호 문자열인지 판단하는 함수
2. 문자열을 u, v로 변환하는 함수
1번 함수에서 스택방식을 이용했는데 여는괄호가 나오면 arr에 저장하고
닫는 괄호가 나왔을 때, 만약 arr이 비어있으면 짝이 맞지않기 때문에 False를 리턴하고
arr에 데이터가 들어있으면 하나씩 지워주는 방식을 사용했다.
그리고 for문이 정상적으로 끝나면 해당 문자열은 정상이기 때문에 True를 리턴했다.
2번 함수에서 u가 더 이상 분리되지 않는 균형잡힌 문자열인지 판단하기 위해 ch와 cnt를 이용했다.
만약 여는괄호가 추가되면 cnt+=1, 닫는 괄호면 cnt-=1을 해서 만약 cnt가 0이 되면 더 이상 분리되지 않는 균형잡힌 문자열이 되기 때문에 ch를 True로 바꾸고 다음 괄호부터 v에 저장했다.
이후 문제에서 주어진 순서대로 코드를 작성했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# 올바른 괄호 문자열인지 판단하는 함수
def checkstr(s):
arr=[]
for i in s:
if i=="(":
arr.append(i)
else:
if not arr:
return False
else:
arr.pop(0)
return True
# 문자열 u, v로 변환하는 함수
def divide(s):
u,v="",""
ch=False
cnt=0
for i in s:
if not ch:
if i=="(":
cnt+=1
u+=i
else:
cnt-=1
u+=i
if cnt==0:
ch=True
else:
v+=i
return u,v
def solution(p):
answer = ''
# 1단계
if not p:
return p
# 2단계
u,v=divide(p)
# 3단계
if checkstr(u):
return u + solution(v)
# 4단계
else:
# 4-1 단계
answer+="("
# 4-2 단계
answer+=solution(v)
#4-3 단계
answer+=")"
# 4-4 단계
for i in u[1:len(u)-1]:
if i=="(":
answer+=")"
else:
answer+="("
# 4-5 단계
return answer
|
cs |
728x90
반응형
'Python3 > 프로그래머스' 카테고리의 다른 글
2022.06.10 [프로그래머스] (python 파이썬) 행렬 테두리 회전하기 (0) | 2022.06.10 |
---|---|
2022.06.07 [프로그래머스] (python 파이썬) 짝지어 제거하기 (0) | 2022.06.07 |
2022.06.07 [프로그래머스] (python 파이썬) 기능개발 (0) | 2022.06.07 |
2022.06.06 [프로그래머스] (python 파이썬) 더 맵게 (0) | 2022.06.06 |
2022.06.06 [프로그래머스] (python 파이썬) 124 나라의 숫자 (0) | 2022.06.06 |
댓글