ubermen5ch   2년 전

저는 지금까지 대부분의 문제를 ArrayList를 이용해 queue를 만들어서 문제를 해결해왔었는데요.

토마토 문제특성상 N,M 배열의 크기가 커서 그 만큼 ArrayList의 size도 커지고 그에 따른 삽입 삭제시 많은 오버헤드가 발생했나봅니다.

로직은 분명히 옳게 짠것같은데 계속 시간초과가 나서 뭔가해서 알아보니 자료구조의 연산 시간 차이로인해 시간초과가 난것이었습니다.

그래서 삽입 삭제시 ArrayList보다 훨씬 효율적인 LinkedList 자료형을 사용해서 해결했습니다. 혹시나 저같은 상황을 마주치는 분들을 위해 글 남겨봅니다.

(수정전 제목 : 토마토 문제 ArrayList로 풀지마세요!!)

djm03178   2년 전

글에 오해의 소지가 있습니다. ArrayList로 구현한다고 해서 항상 비효율적이 되는 것은 아니고, '첫 원소 삭제'와 같은 연산만 안 하면 됩니다. 그런 연산 없이도 ArrayList를 이용한 큐는 쉽게 구현할 수 있습니다. 제목부터 마치 ArrayList를 쓰면 절대로 시간 초과를 피할 수 없을 것처럼 적혀있어 말씀드려봅니다.

ubermen5ch   2년 전

아하 그렇군요! 제가 많이 알아보지않고 너무 섣불리 글을 써버렸네요ㅠ 첫 원소 삭제와 같은 연산을 안하면 된다는 말씀은 첫 원소 삭제시 이후에 존재하는 원소들을 쉬프팅해줘야해서 비효율적이라 그런것일까요? 만약 ArrayList로 queue를 효율적으로 짠다고 한다면 어떻게 짜면 될까요?  답변 주시면 감사하겠습니다 :)





djm03178   2년 전

실제로 원소를 지우지 않고 포인터만 옮기면 됩니다.

https://www.acmicpc.net/source...

ubermen5ch   2년 전

와... 저는 왜 이런생각을 못했을까요 ㅠㅠ 내공이 많이 부족함을 느낍니다 정말 포인터만 옮기면 간단하게 해결되는 문제였군요 코드 잘보았습니다!!

답변감사드립니다

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