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 |
Tags
- 카카오코테
- 방문길이
- 파이썬 #프로그래머스 #코딩테스트
- 코딩테스트
- H-인덱스
- 공식문서
- 파이썬
- 분할정복
- SQL고득점키트
- h-index
- groupby
- 코테
- 2단계
- 스택
- 파이선
- 행렬곱셈
- Join
- SQL #프로그래머스 #SELECT
- Python
- 고득점kit
- 기초
- 재귀
- SQL #프로그래머스 #조건절 #ISNULL
- 프로그래머스
- SQL
- 골든래빗
- 해시
- 고득점키트
- level2
- SQL #프로그래머스 #MAX #MIN
Archives
- Today
- Total
영아일지
[프로그래머스 level-2] 괄호 변환 본문
코딩테스트 연습 - 괄호 변환 | 프로그래머스 스쿨 (programmers.co.kr)
[내 풀이]
1) 문자열이 빈 문자열이면 그대로 리턴
2) 문자열 w를 u,v 로 나누기
이때, u는 균형잡힌 문자열이므로 '(' 수와 ')' 수가 같으면 u라고 두고 나머지는 v라고 둔다.
3) u가 올바른 괄호 문자열인지 확인하는 right 함수를 만든다
u를 하나 씩 대입하며 '(' 인 경우 stk에 넣고, stk이 비어 있지 않으면서 ')'인 경우는 stk에서 '(' 를 제거한다
만약 stk이 비어있는 상태에서 '('이 나오거나 아니면 마지막까지 u값이 왔음에도 불구하고 stk에 문자열이 남아있다면
false, 아니면 true이다.
3-1) 문자열 u가 올바른 괄호 문자열이라면 u값과 v값을 재귀한 후의 값을 문자열로 둔다
여기서 어떤 걸 return해야할지 헷갈려서 오래 걸림
4) 문자열 u가 올바른 괄호 문자열이 아니라면 처리를 해준다
** 여기서 유념할 점은 문자열은 거꾸로 하는 것이 아니라 방향을 전환한다는 것이다!
def solution(p):
return check(p, '')
def right(u):
# 3번 : u가 올바른 괄호 문자열인지 확인
stk = []
for j in range(len(u)):
if u[j] == '(':
stk.append('(')
else:
if stk:
stk.pop()
else:
return False
if stk != []:
return False
return True
def check(w, ans):
#1번 : 빈 문자열
if w == '':
return ''
#2번 : u,v 분리
u, v = '', ''
dic = {'(': 0, ')': 0}
for i in range(len(w)):
dic[w[i]] += 1
u += w[i]
if dic['('] == dic[')']:
break
if i != len(w)-1:
v = w[i+1:]
res = right(u)
#3-1번
if res is True:
return u+check(v, ans+u)
#4번
else:
word = '(' + check(v, ans+u) + ')'
for j in range(1, len(u)-1):
if u[j] == '(':
word += ')'
else:
word += '('
return word
'디지털 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] level 2 이모티콘 할인행사 (0) | 2023.06.22 |
---|---|
[프로그래머스 고득점 키트 - 스택/큐] Level2 - 프로세스 (0) | 2023.05.30 |
[프로그래머스 kakao] level 1 - 실패율 (0) | 2023.05.30 |
코딩테스트 - 분할정복 알고리즘 (0) | 2023.04.27 |
프로그래머스 피보나치 수 문제 (0) | 2023.04.15 |