Section 7-1) 최대점수 구하기(DFS)
133
작성한 질문수 12
안녕하세요 강사님, 질 좋은 강의 제공해주셔서 감사합니다. 아래 첨부한 제 코드로 진행하면 DFS(L+1, sum+s[L], time+t[L]) 에서 list list index out of range 에러가 뜹니다. 강사님은 아래와 같이 푸셨던데, 제 코드에서 어떠한 점이 에러를 반환했을까요?if L==n:
if sum>answer:
answer=sum import sys
sys.stdin=open("input.txt","r")
def DFS(L, sum, time):
global answer
if time>m:
return
if L==n and sum>answer:
answer=sum
else:
DFS(L+1, sum+s[L], time+t[L])
DFS(L+1, sum, time)
n,m=map(int, input().split())
s=list()
t=list()
for i in range(n):
ss,tt=map(int,input().split())
s.append(ss)
t.append(tt)
answer=0
DFS(0,0,0)
print(answer)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 코드에서 발생한 ‘list index out of range’ 에러는 리스트 s와 t에 접근할 때, 인덱스 L이 리스트의 범위를 벗어났기 때문에 발생합니다. 에러 메시지가 나타나는 부분은 DFS(L+1, sum+s[L], time+t[L]) 호출 시점인데요, 이는 L이 n과 같아지는 순간, 즉 L이 리스트 s와 t의 마지막 인덱스를 넘어섰을 때 발생합니다.
강사님이 제시한 해결 방법에서는 if L==n: 조건을 통해 재귀 호출을 종료하게 됩니다. 이 로직은 L이 n에 도달했을 때, 즉 모든 문제를 다 고려했을 때를 의미하며, 이 경우 더 이상 리스트 s와 t에 접근하지 않고 재귀 호출을 종료하도록 설계되어 있습니다.
따라서, 님의 코드에서도 이와 같은 조건을 추가해주어야 합니다. 즉, DFS함수 내부에서 L이 n에 도달했을 때를 체크하는 조건문을 통해 더 이상 리스트에 접근하지 않도록 해야 합니다. 이미 조건문으로 if L==n:을 사용하고 계시니, 이 때 sum과 answer를 비교하는 로직은 올바르게 작성하셨습니다. 문제는 DFS(L+1, sum+s[L], time+t[L])과 DFS(L+1, sum, time) 호출을 할 때, L<n일 때만 실행되도록 조건을 수정해주어야 합니다. 예를 들어, 다음과 같이 조건문 내에 재귀 호출을 넣어주는 것입니다.
if L<n: # L이 n보다 작을 때만 재귀 호출 실행
DFS(L+1, sum+s[L], time+t[L])
DFS(L+1, sum, time)
이러한 방식으로 코드를 수정하면, L이 n과 같아져 리스트의 범위를 벗어나려고 할 때 재귀 호출을 하지 않으므로 ‘list index out of range’ 에러를 해결할 수 있습니다.
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
77
2
스택에서 ')'을 만나는 경우
0
78
3
문제가 어디있나요?
0
66
2
변수 or 함수명
0
61
1
침몰하는 타이타닉 문제 질문입니다
0
56
1
AA.py 책점 에러
0
57
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
160
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
165
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
93
0
5번 틀림
0
114
0
오류원인?
0
98
0
리스트 선언
0
106
1
침몰하는 타이타닉(그리디) 문제 질문
0
109
1
알고리즘
0
69
1
코딩테스트
0
92
1
DFS 순서 질문드립니다.
0
128
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





