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]이 업데이트 되어 더해집니다.

위와 같이 나오는 이유를 모르겠습니다.

dlwnsdud1320   1년 전

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)]

댓글을 작성하려면 로그인해야 합니다.