belline0124   1년 전

preview

여러 번의 시도 동안 알고리즘을 큰 틀에서 바꾸지는 않았고, 이렇게 저렇게 시간을 단축할 수 있는 전략들을 취해봤습니다.

  1. sys.stdin.readline 대신 iter(open(0).read().split('\n')).__next__ 사용
    1. 61% 마의 벽을 깰 수 있게 도와주세요. 를 참조하였습니다.
  2. 파이썬의 기본 list 자료형 대신 collections.deque 자료형 사용
    1. What is a good approach for a fast FIFO queue? 를 참조하였습니다.
  3. 최대한 함수 콜 횟수 감축
    1. 함수 콜에 컴퓨팅 자원이 많이 들어간다는 건 이전에 모 도서를 읽으며 알게 되었습니다.
    2. 경과 시간을 큐에 함께 넣어놓고 elapsed = max(elapsed, now[0]) 식으로 처리했는데, 코드를 고치면서 if now[0] > elapsed: elapsed = now[0] 식으로 처리했습니다.
  4. 결과 출력 시 잔여 0 확인을 출력 직전에 수행하는 것이 아니라 알고리즘 처리 중 0 개수를 계속해서 카운트
    1. 결과 출력 직전에 11중 포문으로 0을 다시 한번 확인하도록 했는데, 처음에 큐에 익은 토마토 위치를 넣기 위해서 반복문을 수행할 때 0도 확인하여 0의 개수를 따로 처리하는 방식으로 변경했습니다.
    2. (의사 코드) if now is 0 then zero_count -= 1

댓글을 작성하려면 로그인해야 합니다.