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 |
Tags
- 에러로깅
- 정렬
- SW마에스트로
- 멀티모듈
- 구현
- web
- 개방주소법
- EC2
- localdatetime
- 객체지향설계
- BFS
- 그리디
- google calendar api
- 탄력적 ip
- DIP
- 완전탐색
- 자료구조
- ZonedDateTime
- 서버타임존설정
- 비즈니스요구사항
- OCP
- DP
- STL
- C++
- multi module
- DFS
- aws
- 해시충돌
- 서버
- hashcollision
Archives
- Today
- Total
레츠고✨
[프로그래머스] 괄호 변환 (python) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(p):
answer = ""
if len(p) == 0:
return p
if isCorrect(p):
return p
# 균형잡힌 괄호 u와 나머지 v로 분리
left = 0
right = 0
for i in range(len(p)):
if p[i] == '(': left += 1
if p[i] == ')': right += 1
if left == right:
u = p[0:i+1]
v = p[i+1:]
break
# 문자열 u가 올바른 괄호 문자열인지
if isCorrect(u):
# 맞으면 v에 대해 1단계부터 다시 수행하고 u에 이어 붙인다
answer = u + solution(v)
else:
# 아니라면 ( + v에 대해 1단계부터 재귀 + ) + u의 첫번째 마지막 문제 제거하고 괄호 방향 뒤집기
answer = "(" + solution(v) + ")" + make_new_u(u)
return answer
def make_new_u(u):
str = u[1:-1]
new_u = ""
for i in range(len(str)):
if str[i] == '(' : new_u += ')'
else: new_u += '('
return new_u
def isCorrect(p):
left = 0
right = 0
for i in range(len(p)):
if p[i] == '(': left += 1
if p[i] == ')' : right += 1
if left < right: return False
return True
문제 설명에 나온 알고리즘 그대로 코드로 구현하면 되는 문제
중복되는 계산만 함수로 따로 빼줬다.
- 이 문자열이 올바른 문자열인지 확인하는 함수
- u의 첫번째 문자와 마지막 문자를 빼고, 나머지의 괄호 방향을 뒤집어서 반환하는 함수
728x90
'Problem Solving > Solution' 카테고리의 다른 글
[백준] 18352. 특정 거리의 도시 찾기 (파이썬) (0) | 2024.02.03 |
---|---|
[백준] 18428. 감시 피하기 (파이썬) (0) | 2024.02.01 |
[백준] 18405. 경쟁적 전염 (python) (1) | 2024.01.31 |
[백준] 14502. 연구소 (python) (0) | 2024.01.30 |
[프로그래머스] 외벽점검 (python) (1) | 2024.01.27 |