adfsfsf   5년 전

우선순위 큐를 써야 한다는 글을 읽고 풀이를 시작했습니다. 현재 코드 방향을 적어보겠습니다.

  1. 구조체 A는 최단거리와 방문 여부, 출발점, 큐의 주소를 원소로 갖는다.
  2. 구조체 B는 도착점과 가중치를 갖느다.
  3. A 내부의 큐는 구조체 B로 이루어져 있다.
  4. 우선순위 큐 C는 A로 이루어져 있다.
  5. C는 정점의 수만큼의 원소를 갖는다.

여기서 A는 코드에서의 info, B는 map, C는 maps입니다.

그런데 위의 방향으로 진행했을 때에 C에 있는 원소들에 대해 최단거리를 갱신할 때 어떻게 해야 할 지 모르겠습니다. 그냥 일일이 꺼내서 출발점을 대조해보는 건 비효율적일 것 같습니다. 한 번 35번 줄에 주석으로 제가 생각하는 방식을 적어보겠습니다. 보시고 의견 부탁드립니다.

djm03178   5년 전

이런 종류의 문제를 푸는 데에 쓰이는 기초적이고 전형적인 알고리즘이 있습니다. 다익스트라 알고리즘에 대해 알아보세요.

다른 방식으로 생각을 해보는 것은 좋지만, 문제 해결을 위한 정형화된 알고리즘이 있는 만큼 그 알고리즘을 공부를 해보시는 편이 더 낫지 않을까 생각합니다.

adfsfsf   5년 전

@djm03178

다익스트라는 알고 있습니다. 소스코드에서 밑에 주석처리된 부분을 보시면 다익스트라를 이용하고 있음을 알 수 있을 겁니다. 제가 알고 싶은 것은 우선순위 큐에 한 번 삽입된 후에는 인덱스로 삽입된 값에 접근할 수 없다는 점에 대한 해결 방안입니다. 정확히는, 제가 알고 싶은 것은 우선순위 큐에 넣는 값에 최단거리도 포함되어 있고, 그 값을 갱신시키는 방법으로 풀려고 하는데 갱신하기 위해서는 큐의 값을 다 꺼내야 하는지, 다 꺼내지 않고도 방법이 있는지에 대한 것입니다.

adfsfsf   5년 전

아, 그리고 주석처리 된 부분은 수정되어서 사라진 변수들을 쓰고 있습니다. shortest는 출발점 기준 미확인 정점 중 최단 거리로 갈 수 있는 정점의 인덱스, visited는 확인된 정점인지를 저장하는 배열, dp는 최단거리를 저장하는 배열이었습니다. map은 큐배열이었고, 정점의 수만큼 큐를 가지고 있었으며 그 큐를 인접리스트의 형식으로 사용했습니다.

djm03178   5년 전

제가 드리고 싶은 말씀은 이론적인 내용을 넘어서 실제로 구현한 코드까지도 공부를 할 수 있다는 점입니다. 질문자님의 질문 내용은 이러한 코드들을 같이 공부했다면 어떻게 처리해야 하는지도 알 수 있을 부분들입니다. 이론적인 내용만 보고 구현은 스스로만 하려고 하니 그런 부분에서 어려움을 겪는 것이고, 그런 경험까지는 좋지만 굳이 질문을 올리지 않고도 해결할 수 있는 방법이 있음을 말씀드리는 것입니다.

3587jjh   5년 전

인덱스값에 직접 접근해서 수정하는 방식으로 하려면 차라리 이진검색트리를 사용하는게 좋지않나 싶습니다.

adfsfsf   5년 전

그렇군요. 한 번 예제들을 조사해보겠습니다. 감사합니다.ㄹ

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