728x90
https://programmers.co.kr/learn/courses/30/lessons/86491
가로가 세로보다 작은 경우에는 회전을 시켜서 보관을 할 수 있기 때문에 가로와 세로의 값을 변경하도록 했다.
이 과정이 for문 안에서 실행이 되었고 이 때 가로와 세로의 값을 변경 하면 기존 값에 덧씌워지기 때문에 제대로 변경이 되지 않는다. 때문에 똑같은 값을 가진 sizes를 복사한 리스트가 필요했다.
여기서 슬라이싱으로 복사([:])를 하니 for문 안에서 실행되던 결과랑 똑같이 제대로 값이 덧씌워지지 않았다.
찾아보니 얕은 복사와 깊은 복사의 차이가 있었다.
슬라이싱으로 복사를 한 건 얕은 복사였고 내부 객체들까지 새롭게 복사되는 깊은 복사를 사용해야만 제대로 값을 변경할 수 있었다.
얕은 복사와 깊은 복사는 https://wikidocs.net/16038 이 링크에서 자세하게 설명하고 있어서 참고하여 이해를 할 수 있었다.
정답 코드
import copy
def solution(sizes):
answer = 0
sizes_list = copy.deepcopy(sizes)
w_list = []
h_list = []
for i in range(len(sizes_list)) :
if sizes_list[i][0] < sizes_list[i][1] :
sizes_list[i][0] = sizes[i][1]
sizes_list[i][1] = sizes[i][0]
w_list.append(sizes_list[i][0])
h_list.append(sizes_list[i][1])
answer = max(w_list) * max(h_list)
return answer
여기서 copy 모듈을 import하여 copy.deepcopy로 깊은 복사를 사용하여 sizes 리스트를 복사했다.
때문에 sizes_list와 sizes는 값만 같고 내부 객체까지 다른 서로 다른 각각의 리스트가 되었다.
그래서 for문 내에서 sizes_list에 sizes의 값을 각각 할당해도 sizes_list나 sizes에 서로 영향을 미치지 않아 원하는 결과대로 가로와 세로의 값을 변경할 수 있었다.
728x90