728x90
🔗 Problem Link
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❔Thinking
- '균형잡힌 괄호 문자열' p가 주어질 때, '올바른 괄호 문자열'로 변환한 결과를 반환한다.
- '균형잡힌 괄호 문자열'은 '('와 ')'의 개수가 같은 문자열이다.
- '올바른 괄호 문자열'은 '균형잡힌 괄호 문자열'이면서 '('와 ')' 짝이 모두 맞는 문자열이다.
💻Solution
def bracket_check(s):
cnt = 0
for char in s:
if cnt < 0:
return False
cnt += 1 if char == '(' else -1
if cnt != 0:
return False
return True
def bracket(p):
# 1. 입력이 빈 문자열인 경우
if p == '':
return ''
# 2. 문자열을 균형잡힌 괄호 문자열 u, v로 분리
left_right_cnt = 0
idx = 0
for i in range(len(p)):
left_right_cnt += 1 if p[i] == '(' else -1
if left_right_cnt == 0:
idx = i
break
u, v = p[:i+1], p[i+1:]
# 3. u가 올바른 괄호 문자열인 경우
if bracket_check(u) is True:
return u + bracket(v)
# 4. u가 올바른 괄호 문자열이 아닐 경우
tmp = '(' + bracket(v) + ')'
if u:
for char in u[1:-1]:
tmp += '(' if char == ')' else ')'
return tmp
def solution(p):
return bracket(p)
🗝️keypoint
- 주어진 알고리즘을 순서대로 빠짐없이 그대로 구현하는것이 중요하다.
- 괄호가 한 종류일 경우, '올바른 괄호 문자열'은 별도의 list 없이 int로 확인할 수 있다.
- 4-4의 '나머지 문자열의 괄호 방향을 뒤집어서'는 문자열의 순서를 뒤집는게 아니라 각 괄호의 방향만 뒤집는 것이다.
'코딩테스트 > Python' 카테고리의 다른 글
[Programmers] Level 3. 여행경로 (0) | 2023.01.18 |
---|---|
[Programmers] Level 4. 가사 검색 (0) | 2023.01.12 |
[Programmers] Level 3. 자물쇠와 열쇠 (0) | 2023.01.09 |
[Baekjoon] 4485. 녹색 옷 입은 애가 젤다지? (0) | 2023.01.08 |
[Baekjoon] 6497. 전력난 (0) | 2023.01.08 |