[백준] 1848. 동굴탐험

newbieski·2021년 7월 14일
0

백준

목록 보기
5/210

https://www.acmicpc.net/problem/1848

  • 터널 하나가 갈때 올때 서로 값이 다른 것이고 한번만 쓰이는 것임
  • 한점만 방문해서는 안되고(1 - 3 - 1 이런것은 안되니까) 2번 이상 방문했을때 최소값을 구하고 싶은데 잘 안되었음(중복해서 점을 방문하는 처리..)

접근1

  • 단순하게 k에서 시작해서 k가 아닌 점에서 끝난다고 치고, 1에서 k거리 + k에서 끝나는 점 거리 + 끝나는점에서 1까지 거리를 구하면 됨
  • 이를 각 점에 대해서 반복하면.. N M logM 정도 나옴
  • 비슷하게 시작점을 들고다니면서 각 점마다 [각점][시작점] 식으로 거리 배열을 가져가는 접근도 해봄
  • 대략 5억정도라서 엄청 시간이 많이 걸리거나 타임아웃이 나겠거니 해서 제출해봤는데 메모리 초과가 남
  • pq에 엄청 많이 들어가서 나름 가지치기를 해보았지만 실패

접근2

  • 모든 시작점에서 시작을 하면서, 1로 방문 하지 않거나(현재 방문한 점이 시작점일 경우, 최초 시작), 시작점에 방문하지 않거나(다음 방문할 점이 시작점일 경우 두번 방문하니까..) 등을 처리했는데 답이 안나옴
  • 추측해보면 최소거리를 구하는 과정에서 어떤점 x까지의 최단거리라고 보면 시작점이 a일때 최단거리라서 시작점이 b인 경우는 방문을 못하고.....
  • 계속 진행하다보면 시작점이 a인 것들만 살아남는다든지
  • 또는 한쪽은 a만 살아남고 한쪽은 b만 살아남아서 결국 연결이 끊긴다든지 이런 예외가 있는 것 같다.

접근3

  • 최단거리가 아니고 그 다음 최단거리도 구하면 되지 않을까 어렴풋이 생각은 했지만
  • 시작 점에 따라 처리를 어떻게 해야할지 생각이 잘 안서서 고민하던 차에
  • 먼저 고민을 하신분께 조언을 얻고 구체화 해서 도전을 해봄
  • 최단거리와 그 다음 최단거리를 구해나가기 + 시작점도 같이 저장
  • 결과적으로 접근 1에서 2차원 배열의 경우의 수를 줄인 형태인데
  • 서로 다른 시작점을 가진 것들로 경로를 구해나가다 보니 각 점에대해서 의미있는 최소 거리를 구한다는 접근인 것 같은데
  • 왜 최단거리만으로는 못구하는지, 왜 2개의 거리만으로 반드시 구해지는지(3개를 구하는 것도 아니고 4개를 구하는 것도 아니고) 는 확실히 증명을 못하겠다
profile
newbieski

0개의 댓글