https://www.acmicpc.net/problem/1309

 

1309번: 동물원

첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.

www.acmicpc.net

백준 1309번 동물원 문제를 풀던 도중...

d[n][k] 배열을 선언해야 했는데 (N(1≤N≤100,000), K = 3)

 

d = [[1, 0, 0]] + [[0, 0, 0]] * n 을 선언해서 solution을 돌렸을 때죽어도 원하는 값이 나오질 않았다.

 

분명 solution은 맞게 풀이하였고, 아무리 디버깅을 해봐도 맞았다.

 

그래서 d2 = [[0] * 3 for _ in range(n + 1)] 로 리스트를 다시 만들고d2[0][0] = 1로 초기화 해준 뒤 solution을 돌리니 원하는 값이 나왔다.

 

 

혹시나 해서 d의 값을 변경 해보았더니 아뿔싸.

얕은 복사가 이루어진 리스트 d

 

 

리스트 d를 선언할 때 [[0, 0, 0]] * n 이 문제였다.

리스트 속 리스트를 곱연산 하기 때문에 외부 리스트와는 별개로

내부의 [0, 0, 0]이 얕은 복사가 이루어져 d[0]를 제외한 d[1:n + 1]까지의 모든 리스트가 얕은 복사가 된 것이다.

 

얕은 / 깊은에 대해서 내가 의도적으로 사용하지 않는 한 의식해본 적이 없었는데,

이렇게 문제를 풀면서 내가 많은 것을 놓치고 있었다는걸 다시금 깨달았다.

 

분발하자!

'파이썬 (Python)' 카테고리의 다른 글

[22-03-06] 학습일지 "카운터, 열거형"  (0) 2022.03.06
20220131 공부일지  (0) 2022.01.31
22-01-10 학습일지 [비트 마스크]  (0) 2022.01.10
22-01-02 학습일지  (0) 2022.01.02
[파이썬] 21-12-03 학습일지  (0) 2021.12.03

+ Recent posts