Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @GeneratedValue
- @GenericGenerator
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
- Collections
- Combination
- combinations
Archives
- Today
- Total
기록
프로그래머스_python_괄호변환 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/60058
풀이
문제에서 주어진 방법을 따라 그대로 구현한다.
1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다.
2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다.
3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다.
3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다.
4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다.
4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다.
4-2. 문자열 v에 대해 1단계부터 재귀적으로 수행한 결과 문자열을 이어 붙입니다.
4-3. ')'를 다시 붙입니다.
4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.
4-5. 생성된 문자열을 반환합니다.
"나머지 문자열의 괄호방향을 뒤집다"라는 말을 문자열[::-1]로 해석하면 안된다.
) 는 ( 로, ( 는 ) 로 바꾸라는 의미이다.
"((()" → ")))("
코드
def solution(p):
# 1
if p=="" : return ""
# 2. 문자열을 두 균형잡힌 괄호 문자열 u, v로 분리
s, e, check = 0, 0, True
index = 0
for i, char in enumerate(p) :
if char=='(' : s += 1
else : e+= 1
if s==e :
index = i+1
break
if s<e : check = False
u, v = p[:index], p[index:]
# 3. u가 올바른 괄호 문자열
if check==True : return "%s%s"%(u,solution(v))
# 4. u가 올바르지 않은 괄호 문자열
if check==False :
new_u = "".join([')' if char=='(' else '(' for char in u])
return "(%s)%s"%(solution(v), new_u[1:-1])
'코딩테스트 > python' 카테고리의 다른 글
백준_2239_스도쿠 (0) | 2022.03.07 |
---|---|
백준_1644_소수의 연속합 (0) | 2022.03.04 |
백준_9527_1의 개수 세기 (0) | 2022.02.26 |
프로그래머스_python_오픈채팅방 (0) | 2022.02.23 |
프로그래머스_python_문자열압축 (0) | 2022.02.14 |
Comments