문제 출처: https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
# 입력 받은 모든 토마토 상태 그래프
graph = [list(map(int, input().split())) for _ in range(n)]
# 모든 토마토가 익었을 때의 그래프
finish_graph = graph
print(graph)
for i in range(n):
for j in range(m):
if finish_graph[i][j] == 0:
finish_graph[i][j] = 1
print(graph)
graph 출력 결과
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1]]
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]]
기존 graph 값이 변해버렸다. > shallow copy 결과
deep copy는 전체 복사로 참조값의 복사가 아닌 참조된 객체 자체를 복사하는 것
- copy모듈의 deepcopy() 이용
import copy
# 입력 받은 모든 토마토 상태 그래프
graph = [list(map(int, input().split())) for _ in range(n)]
# 모든 토마토가 익었을 때의 그래프
finish_graph = copy.deepcopy(graph)
print(graph)
for i in range(n):
for j in range(m):
if finish_graph[i][j] == 0:
finish_graph[i][j] = 1
print(graph)
graph 출력 결과
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1]]
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1]]
graph 자체는 변하지 않게 된다.
자세한 설명은
아래 블로그 참고하면 된다.
https://crackerjacks.tistory.com/14
파이썬 (Python) - 깊은 복사 (Deep Copy)
파이썬 (Python) - 깊은 복사 (Deep Copy) 알고리즘을 풀다 보면 원본배열의 보존을 위해 배열을 복사할 필요를 느낄때가 많다. 객체를 무작정 복사해서 사용하면 원본 객체가 핸들링되어 데이터가 변
crackerjacks.tistory.com
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 2292 벌집문제 - 브론즈2인데 왜 못 풀었을까. 간단한데 (0) | 2023.02.22 |
---|---|
[백준] 7576번 토마토 상자 - 시간초과.. BFS 활용하자 (0) | 2023.02.20 |
BFS DFS 정복하기 (0) | 2023.02.20 |
약점보완: Dynamic Programming (0) | 2023.02.09 |
[백준] 2164번 카드2 - 시간초과, 짝수 홀수 인덱스만 추출하기 (0) | 2023.02.02 |