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
- 기술면접
- mrc
- Level2_PStage
- 파이썬 3
- 백트랙킹
- U_stage
- 주간회고
- 단계별문제풀이
- python3
- 프로그래머스
- 이진탐색
- 글또
- Level1
- 부스트캠프_AITech_3기
- 부스트캠프_AITech3기
- 그리디
- 이코테
- 백준
- 구현
- 알고리즘_스터디
- 개인회고
- Level2
- 최단경로
- dp
- dfs
- 그래프이론
- ODQA
- 다시보기
- 정렬
- 알고리즘스터디
Archives
- Today
- Total
국문과 유목민
[DFS/BFS] 괄호변환 본문
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다.
문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다.
소요시간: 40분 + a
1. 문제 설명
- 괄호( '( )')가 주어졌을 때, 이것이 서로 짝이 맞는지 확인하고 맞지 않는다면 짝을 맞출 수 있도록 재귀적으로 코드를 만드는 문제
2. 접근 방식
- DFS라는 것은 문제 설명으로 알 수 있었다.
- 하지만 DFS보다는 구현과 관련된 문제라는 생각이 들었다.
- 그래서 문제를 푸는데 꽤나 힘들었고, '완전한 문자열'로 만드는 키 아이디어를 생각하지 못해서 결국 해답을 봐버렸다.
- 완전한 문자열로 만드는 경우 해답에서는 균형잡힌 문자열을 입력으로 받아서 균형이 안맞는 경우가 생기면 False를 리턴하는 함수를 통해 구현을 했다. 해당 키 아이디어를 이해한 순간 나머지 코드는 자연스럽게 풀 수 있었다.
3. 코드
# 균형잡힌 괄호 문자열의 인덱스 반환
# 여기까지는 구현했었다.
def balaced_index(p):
count = 0 # 왼쪽 괄호의 개수
for i in range(len(p)):
if p[i] == "()":
count+=1
else:
count -=1
if count == 0:
return i
# 이거를 구현하지 못했다.
# 균형잡힌 괄호 문자열만 들어오기 때문에 중간에 0이 되면 안 된다.
# 예를 들어 (()))( 이 경우 도중에 0이 되어 버린다. 그러면 완전한 문자열이 아니게 된다.
def check_proper(p):
count = 0
for i in p:
if i == "(":
count+=1
else:
if count == 0:
return False
count -=1
return True
# 주어지는 input의 개수는 균형잡힌 괄호 문자열이다.
# 균형잡힌 괄호 문자열인지 확인하는 함수 필요
from collections import deque
def solution(p):
answer = ""
if p == "":
return answer
i = balanced_index(p)
u, v = p[:i+1], p[i+1:]
if check_proper(u):
answer = u+solution(v)
return answer
else:
answer += "("
answer += solution(v)
answer += ")"
for i in u[1: -1]:
if i =="(":
answer += ")"
else:
answer += "("
return answer
4. 코멘트
- 확실한 키 아이디어를 생각하기까지는 많은 경험이 필요해보인다.
'알고리즘_코딩테스트 > 이것이 코딩테스트다' 카테고리의 다른 글
[정렬] 국영수 (0) | 2021.12.17 |
---|---|
[DFS/BFS] 인구이동 (0) | 2021.12.16 |
[DFS/BFS] 경쟁적 전염 (0) | 2021.12.16 |
[DFS/BFS] 연구소 (0) | 2021.12.16 |
[DFS/BFS] 특정 거리의 도시 찾기 (0) | 2021.12.16 |