정체중...

아무래도 일주일에 한 문제씩만 풀고 있다보니
당연히 실력 향상은 크게 되지는 않았다.
이번에는 4문제밖에 풀지 못했는데 생각보다 점수가 높게 나와서 의외였다.
DFS에 대한 학습이 더 필요하다고 나왔다.
앞으로 계속해서 Backtracking, DFS 문제들을 풀어나가면서 완벽하게 만들어야겠다.
사다리 타기
문제 링크: https://www.codetree.ai/missions/2/problems/ladder-game?&utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
3시간 넘게 고민을 하다가 해설을 참고해서 아이디어를 얻은 후 나만의 방식으로 다시 코드를 작성했다.
아래는 본인이 작성한 테스트케이스를 통과한 정답 코드이다.
n, m = tuple(map(int, input().split()))
lines = list()
for _ in range(m):
a, b = tuple(map(int, input().split()))
lines.append((b, a))
lines.sort()
def go(person, lines):
'''한 사람의 결과(위치)를 반환'''
global n
cur_b, cur_j = 1, person
while (True):
found = False
for line in lines:
if line[0] >= cur_b and (line[1] == cur_j or line[1] == cur_j-1):
found = True
cur_b = line[0] + 1
if line[1] == cur_j:
cur_j += 1
else:
cur_j -= 1
break
if not found:
break
return cur_j
def ghostLeg(lines):
'''게임의 결과를 반환'''
global n
global m
result = [-1 for _ in range(n)]
for person in range(1, n+1):
pos = go(person, lines)
result[pos-1] = person
return result
def lineCmb(i, cmb):
'''가능한 가로줄 조합들을 모두 찾아준다.'''
global cmbs
if i == m:
cmbs.append(cmb)
return
cmb.append(lines[i])
lineCmb(i+1, cmb[:])
cmb.pop()
lineCmb(i+1, cmb[:])
init_res = ghostLeg(lines)
min_m = m # 최소 가로줄 수
cmbs = list()
lineCmb(0, [])
for cmb in cmbs:
if len(cmb) < min_m and init_res == ghostLeg(cmb):
min_m = len(cmb)
print(min_m)'Language > Python' 카테고리의 다른 글
| [코드트리 챌린지] 7주차 - Backtracking (0) | 2023.10.19 |
|---|---|
| [코드트리 챌린지] - 6주차 Backtracking (0) | 2023.10.16 |
| [코드트리 챌린지] 4주차 - K개 중 하나를 N번 선택하기(Simple) (2) | 2023.10.01 |
| [코드트리 챌린지] 3주차 - K개 중 하나를 N번 선택하기(Simple) (0) | 2023.09.21 |
| [코드트리 챌린지] 2주차 - 격자 안에서 여러 객체를 이동 (0) | 2023.09.18 |