[프로그래머스][python]행렬 테두리 회전하기_시간초과_deepcopy

최혜원·2022년 8월 24일
0

관련 문제

https://school.programmers.co.kr/learn/courses/30/lessons/77485

😥Probelm: 시간초과

  • 테케는 다 맞는데 시간초과 발생
  • 기존 로직
    • graph를 deepcopy하여 깊은 복사한 그래프 grpah'를 생성한다.(주소값이 전달되지 않아 두 개의 그래프가 독립적으로 작동)
    • 회전하는 방향에 따라 4개의 for문(상,하,좌,우)으로 값들을 바꿔서 새로운 그래프에 저장한다.
    • 값을 저장할 때마다 값들을 mins 리스트에 추가한다.
    • 다 회전한 새로운 graph 와 min(mins)를 리턴한다.
  • 시도 1. 원래 test case도 틀렸었는데, 그 이유는 graph를 deepcopy를 안하고 그냥 copy를 해주었기 때문.
    ❗ deepcopy(깊은 복사)와 shallow copy(얕은 복사)의 차이
    -> 간략하게는 깊은 복사는 주소까지 복사하지 않고 다른 주소에 값만을 저장하기 때문에 다른 그래프에서 값이 변경되어도 동시에 변경되지 않는 반면 얕은 복사는 주소값으로 받아오는 것이기 때문에 값이 변경되면 동시에 복사된 그래프도 값이 변경된다.
    • 나는 그래프 값을 변경한 것과 원래의 그래프가 동시에 필요하므로 graph를 깊은 복사해주었어야 했다.
  • 시도 2. 메모리 때문인가 해서 나중에 deepcopy로 생성된 graph'를 del graph'로 메모리 해제해줬는데도 결과는 똑같이 시간초과

😊Solution: 그래프 하나로 사용

  • 그래프 자체 크기가 최대한으로 클 경우를 생각해 보았을 때 deepcopy가 시간이 오래 걸릴 것이라고 생각하고 deepcopy한 그래프를 사용하지 않고 기존 그래프 하나로 사용.
  • 검색해보니 deepcopy모듈 자체가 속도가 그냥 단순히 slicing 하는 것보다 느리다고 한다.
  • 코테에서는 되도록 deepcopy 사용을 하지 말자!
profile
ML_engineer

0개의 댓글