97psh   1년 전

최단 경로 구하는 문제입니다. 먼저 플로이드로 접근했으나 시간초과 걸려서 다익스트라로 변경하였고, 인접행렬 사용시 메모리 초과가 발생하여 Map을 사용하였습니다.

메모리 초과를 해결하니 다시 시간초과가 뜨네요.

Map이 연결리스트랑 속도차이가 그렇게 많이 날까요.?

아니면 무엇 때문에 시간초과가 나는 걸까요.

djm03178   1년 전

인접 행렬 대신 인접 리스트를 쓰셨다고 했지만 결국 구현한 코드는 인접 행렬이나 마찬가지입니다. 없는 원소를 리스트에 넣지 않았을 뿐이지, 다익스트라를 하는 과정에서 결국 모든 정점에 대해 간선이 존재하는지 여부를 확인하고 있기 때문입니다. 그렇게 할 필요 없이, 리스트 안에 있는 원소들만 탐색하면 됩니다.

97psh   1년 전

와 감사합니다. 

정말로  Map 내부에 있는 것만 탐색해도 정상적으로 수행되네요. 


하지만 틀렸습니다가 뜨는 걸 보니 코드를 다시 봐야겠네요 ㅋㅋ. 

97psh   1년 전

질문 게시판 탐색 결과 틀렸습니다가 뜨는 이유는 동일한 정점에 여러개에 간선이 존재할 수 있다는 조건이 Map 사용으로 인해 무시되기 때문이었습니다.

자료구조를 Map에서 연결리스트로 변경하였습니다.


변경 과정에서 iterator를 사용하여 탐색을 진행하는데 탐색중인 리스트에 원소를 추가하는 경우가 생겨 ConcurrentModificationException 오류가 발생하였습니다.

iterator를 listiterator로 변경하고 listiterator에 원소를 추가함으로 문제를 해결 할 수 있었습니다.


답변해주신 분 덕분에 해결 할 수 있었습니다. 감사합니다 ㅠㅠ.

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