IndexError 이유
input n 이 0일 때 dp[1] = stairs[1] 에서 stairs[1]에 접근하기 때문 또한 n 이 1, 2, 3 일때도 dp 초기화에서 같은 문제가 발생한다. input n이 0 이면 stairs에는 -1만 들어있는 상태이기 때문에, 리스트가 stairs[0]까지만 접근이 가능하다. 그런데 있지도 않은 stairs[1]에 접근하려고 하니 IndexError가 떴던 것
IndexError가 난 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import collectionsn = int (input ()) stairs = [-1 ] for _ in range (n): stairs.append(int (input ())) dp = collections.defaultdict(int ) dp[1 ] = stairs[1 ] dp[2 ] = stairs[1 ]+stairs[2 ] dp[3 ] = max (stairs[1 ] + stairs[3 ], stairs[2 ]+stairs[3 ]) for i in range (4 , n+1 ): dp[i] = max (dp[i-2 ]+stairs[i], dp[i-3 ]+stairs[i-1 ]+stairs[i]) print (dp[n])
IndexError 해결방법1
staris 도 defaultdict(int)로 선언해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import collectionsn = int (input ()) stairs = collections.defaultdict(int ) for i in range (1 , n+1 ): stairs[i] = int (input ()) dp = collections.defaultdict(int ) dp[1 ] = stairs[1 ] dp[2 ] = stairs[1 ]+stairs[2 ] dp[3 ] = max (stairs[1 ] + stairs[3 ], stairs[2 ]+stairs[3 ]) for i in range (4 , n+1 ): dp[i] = max (dp[i-2 ]+stairs[i], dp[i-3 ]+stairs[i-1 ]+stairs[i]) print (dp[n])
IndexError 해결 방법2
if문으로 n이 0일 때와 dp 초기화에 해당하는 n이 1,2,3 일 때를 모두 if문으로 예외처리해준다.
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 import collectionsn = int (input ()) stairs = [-1 ] for _ in range (n): stairs.append(int (input ())) dp = collections.defaultdict(int ) if n == 0 : print (0 ) elif n == 1 : print (stairs[1 ]) elif n == 2 : print (stairs[1 ]+stairs[2 ]) elif n == 3 : print (max (stairs[1 ] + stairs[3 ], stairs[2 ]+stairs[3 ])) else : dp[1 ] = stairs[1 ] dp[2 ] = stairs[1 ]+stairs[2 ] dp[3 ] = max (stairs[1 ] + stairs[3 ], stairs[2 ]+stairs[3 ]) for i in range (4 , n+1 ): dp[i] = max (dp[i-2 ]+stairs[i], dp[i-3 ]+stairs[i-1 ]+stairs[i]) print (dp[n])