-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
19-jung0115 #178
Merged
Merged
19-jung0115 #178
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
janghw0126
approved these changes
Oct 29, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 정미님처럼 문제에 주어진 요구사항 그대로 따라 구현하였습니다!
def solution(p):
if not p:
return p
answer = ""
is_balanced = True
balance = 0
for i, char in enumerate(p):
balance += -1 if char == '(' else 1
if balance > 0:
is_balanced = False
if balance == 0:
u, v = p[:i + 1], p[i + 1:]
if is_balanced:
answer = u + solution(v)
else:
flipped_u = ''.join('(' if ch == ')' else ')' for ch in u[1:-1])
answer = '(' + solution(v) + ')' + flipped_u
break
return answer
시험 기간이 끝나고 오랜만에 알고리즘 문제를 붙잡는 거라 쉽지 않았는데, 문제 조건을 하나하나 적용해가면서 결국 풀었네요..!
셤도 끝났겠다 이제 제대로 한번 달려보겠습니다!😍
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
➡️ 문제 풀이 코드
🔗 문제 링크
프로그래머스 | 분할정복 - 괄호 변환(Lv.2)
✔️ 소요된 시간
1시간
✨ 수도 코드
이번 문제는 친절하게 올바른 괄호 문자열로 변환할 수 있는 방법을 과정으로 설명해줘서 사실 그대로 따라 구현하기만 하면 됐습니다...!
우선 균형잡힌 괄호 문자열, 올바른 괄호 문자열인지 판단하기 위한 로직을 구현하기 위해 문자열을 정수형 list로 변환해줬습니다.
"("는 1로 ")"는 -1로 변환하여, 만약 총합이 0이면 균형잡힌 문자열임을 알 수 있도록 했습니다.
그리고 이를 합산하는 과정에서 합이 0보다 작아지면, 즉 왼쪽에 위치한 "("의 개수보다 ")"의 개수가 더 많아지면, 올바른 문자열이 될 수 없기 때문에 이를 이용해 올바른 괄호 문자열인지도 판별할 수 있었습니다.
균형잡힌 괄호 문자열 u, v로 나누기 위해 첫 문자부터 합산하며 0이 되는 지점을 찾고,
그 index에서 문자열을 나눴을 때 u가 올바른 괄호 문자열인지 아닌지에 따라 다른 과정을 거쳐줬습니다.
우선 u가 올바른 괄호 문자열인지에 관계없이 v는 재귀로 돌려주고,
u가 올바른 괄호 문자열일 경우 이와 합쳐서 반환해줍니다.
u가 올바른 괄호 문자열이 아닐 경우에는, 문제에서 설명한 4번의 과정을 그대로 따라줍니다.
빈 list를 생성하고 "("를 붙인 뒤, 재취로 구해낸 v 값을 이어 붙이고, ")"를 붙인 다음 u의 값들을 모두 뒤집어서 이어 붙여줍니다.
위 방법을 반복하면 결국 올바른 괄호 문자열을 구해낼 수 있게 됩니다.
이제 마지막으로 최종 출력 전 1를 "("로, -1을 ")"로 바꿔준 뒤 반환해주면 됩니다!
✅ 최종 코드
📚 새롭게 알게된 내용