코딩테스트) 시간초과를 줄이는 팁

finley 아바타

📍자료의 삭제, 수정이 많은 문제

Array의 경우 index로 접근하는 것이 O(1)인 대신 remove하는 경우 배열의 모든 element를 돌면서 해당 element를 찾아서 삭제하고 삭제한 이후에도 element들을 순서대로 다시 저장한다. 즉, append는 O(1)이지만 remove의 경우 O(n)의 시간복잡도를 가지므로 시간초과가 날 가능성이 높다.

스위프트에서 추가, 삭제가 O(1)인 자료형은 set과 dictionary 두가지이다. 두 자료형은 각각 element와 key가 Hashable해야한다. 따라서 자료의 hash 값을 통해서 O(1)의 시간 복잡도로 추가 삭제가 가능하다.

📍for문에 if절 대신 where절 / 이중 for문 대신 .write() 사용

if절을 사용한 for문은 인덱스를 한번 더 체크하고 넘어가야하지만, where절을 사용한 경우 for문에서 걸러 탐색하기 때문에 코드가 간결해진다

📍출력줄이기

print()가 시간초과에 주범이 된다. 특히 여러개의 출력을 해야하는 경우가 그런데 이 때는 다음과 같은 방법으로 대처가 가능하다.


댓글 남기기