jemmm   3년 전

안녕하세요!

다른 방법으로 풀었지만 메모이제이션 공부를 위해 이 방법으로 풀어보았습니다.

n>=2 일 경우 메모이제이션(리스트-li) 의 값들이 같아지는 현상이 나타납니다.

왜 그런지 이유를 모르겠네요 ㅠㅠ

제가 메모이제이션을 잘못 이해하고 있는 걸까요?

아니면 다른걸 놓친 걸까요?

seico75   3년 전

li = [[0]*10]* 10
li
li[0][0] = 1
li

위 코드를 실행해보시면 문제를 아실 수 있을 것 같습니다.

[0] * 10 은 0이 10개 있는 list 이지만

([0] *10) *10 은 그 리스트를 10개 복사해서 붙인 리스트이긴한데....

10개가 같은 리스트를 가리킵니다. 그래서 li[0] 의 어떤 원소를 바꾸면

li[1] 의 그 위치 원소, li[2]의. .. 등등다 바뀝니다.

그래서 아래와 같이 반복적으로 써주셔야 합니다.

li = [ [0] * 10 for i range(n) ]

seico75   3년 전

li = [ [0] * 10 for i in range(n) ]

입니다. in 이 빠졌네요

jemmm   3년 전

감사합니다!

하루종일 고민했는데 덕분에 의문이 풀렸습니다

좋은 주말 보내시길 바랍니다!!

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