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를 선언할 때 [[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 |