티스토리 뷰
반응형
문제
programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴�
programmers.co.kr
문제 상황
- 괄호의 묶음을 입력받아 처리하는 로직을 알려주고 그것을 구현하는 문제
해결 전략
- 문제를 이해하고 그대로 구현하면 된다.
코드
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
|
# 45분
# 균형 잡힌 문자열로 분리
def balenced(p):
# "(", ")"
check = [0,0]
for i in range(len(p)):
if p[i] == "(": check[0] += 1
else : check[1] += 1
if check[0] == check[1]: return p[:i+1], p[i+1:]
return p, ""
# 올바른 문자열인지 확인하는 함수
def correct(p):
stack = []
for i in range(len(p)):
if p[i] == "(":
stack.append("(")
else:
if not stack: return False
else : stack.pop()
# 다 돌았는데 stack이 남았으면 거짓, stack이 없으면 True
if stack : return False
return True
# 4-4를 구현
def cutting(u):
# 만약 길이가 2보다 작으면 앞 뒤를 자를 수 없다.
if len(u) < 2 :
return ""
else:
u = u[1:-1]
for i in range(len(u)):
if u[i] == "(":
u = u[:i] + ")" + u[i+1:]
print(u)
else:
u = u[:i] + "(" + u[i+1:]
# print(u)
return u
def solution(p):
if p == "": return ""
# 균형잡힌 문자열로 분리
u, v = balenced(p)
# 만약 u가 올바른 문자열이면
if correct(u): return u + solution(v)
# u가 올바른 문자열이 아니라면
else:
return "(" + solution(v) + ")" + cutting(u)
|
cs |
해설
- 주어진 문제 상황을 그대로 구현하면 된다.
새로 학습한 것 & 실수
- 대입을 해야하는데 =가 아니라 ==를 써넣어 찾는데 문제를 푸는 시간보다 더 오래걸렸다.
- 대입할 때, 같은지 확인할 때 부호를 꼼꼼하게 확인한다.
- p를 넣었을 때 p에 u를 추출할 수 없는 경우 v를 공백처리해주고 모든 요소를 p에 넣는 경우를 생각하지 못했다. 마지막에 return문을 안넣으면 위와 같은 상황에 None이 출력된다.
반응형
'알고리즘 학습 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 멀쩡한 사각형 (Summer/Winter Coding(2019)) [Python] (0) | 2021.01.07 |
---|---|
프로그래머스 - 자물쇠와 열쇠 [Python] (0) | 2020.09.12 |
프로그래머스 - 길 찾기 게임 [Python] (0) | 2020.09.11 |
프로그래머스 - 무지의 먹방 라이브 [Python] (0) | 2020.09.11 |
프로그래머스 - 조이스틱 [Python] (0) | 2020.09.10 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 순열사이클#BOJ#Python
- 공유기 설치#BOJ#이분탐색#Python
- 날짜 계산#BOJ#완전탐색#Python
- 미로 탐색#백준알고리즘#Python
- 터틀비치#리콘#xbox#controller
- API#lazy#
- filter#isalnum#lower
- Swift#Tuples#Range
- 종이자르기#분할정복#BOJ#Python
- 배열합치기#분할정복#BOJ#Python
- django
- Brackets#Stacks and Queues#Codility#Python
- 텀 프로젝트#백준알고리즘#Python
- NumberofDiscIntersections#Codility#Sort#Python
- PassingCars#Codility#Python
- 나무자르기#BOJ#이분탐색#Python
- 토마토#백준알고리즘#Python
- N으로 표현#DP#Programmers#Python
- 백준 알고리즘#BackTracking
- 리모컨#완전탐색#BOJ#Python
- 랜선자르기#이분탐색#BOJ#Python
- Triangle#Sorting#Codility#Python
- 반복수열#백준알고리즘#Python
- 쿼드트리#BOJ#분할정복#Python
- 파이썬알고리즘인터뷰#4장
- 섬의개수#백준알고리즘#Python
- 병든 나이트#BOJ#탐욕법#Python
- 암호코드#dp#BOJ#Python
- Distinct#Codility#Python
- django#slicing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함