IndexError 이유 
input n 이 0일 때 dp[1] = stairs[1] 에서 stairs[1]에 접근하기 때문
 
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])