dp=[[0,0]] * 41 여기 부분 때문에 오류가 나는 것 입니다.
이렇게 배열을 선언할 시 얕은 복사로 대입연산자를 사용하며 각각 대입할 시 모든 부분에 동시 복사가 일어나게 됩니다.
dp[j]=[(dp[j-1][0]+dp[j-2][0]),(dp[j-1][1]+dp[j-2][1])] 은 한번에 넣었기 때문에 오류가 일어나지 않은 것 같네요.
dp[j][0] = dp[j-1][0]+dp[j-2][0]
dp[j][1] = dp[j-1][1]+dp[j-2][1]
이렇게 코드를 작성하고 싶으시면 반복문을 사용하셔서 이중 배열을 작성하시면 됩니다.
d = [[0 for col in range(2)] for row in range(41)]
hyeyoon0613 1년 전
제가 적은 1003번 정답 코드입니다.
T=int(input())
answer=[]
for i in range(T):
N=int(input())
dp=[[0,0]] * 41
dp[0] = [1,0]
dp[1] = [0,1]
for j in range(2,N+1):
dp[j]=[(dp[j-1][0]+dp[j-2][0]),(dp[j-1][1]+dp[j-2][1])]
answer.append(dp[N])
for i in range(len(answer)):
print(answer[i][0],answer[i][1])
근데 이 부분 dp[j]=[(dp[j-1][0]+dp[j-2][0]),(dp[j-1][1]+dp[j-2][1])] 을
아래와 같이 적을경우에는,
dp[j][0]= dp[j-1][0]+dp[j-2][0]
dp[j][1]=dp[j-1][1]+dp[j-2][1]
정확한 정답이 나오지 않고 dp[j][0]과 dp[j][1]이 업데이트 되어 더해집니다.
위와 같이 나오는 이유를 모르겠습니다.