inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

채점사이트 연결 방법(2025년 4월 변경된 연결방법입니다[필수])

다익스트라에서 반대로 최장 거리를 구하는 코드에 대해 질문드립니다.

793

태호

작성한 질문수 11

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

 

class Node implements Comparable<Node>{

int v;

int c;

Node(int v, int c){

this.v=v;

this.c=c;

}

@Override

public int compareTo(Node o) {

return o.c-this.c; //최장거리를 구해야하니까 기존과 반대로

}

}

public class Main {

public static int[] dis;

public static ArrayList<Node>[] graph;

public static int n,m;

public static void dij(int s) {

PriorityQueue<Node> q = new PriorityQueue<>();

q.offer(new Node(s,0));

dis[s] = 0;

while(!q.isEmpty()) {

Node tmp = q.poll();

int now = tmp.v;

int nowcost = tmp.c;

if(nowcost<dis[now]) continue; //기존과 반대

for(Node ob : graph[now]) {

if(dis[ob.v]<nowcost+ob.c) { //기존과 반대

dis[ob.v]= nowcost+ob.c;

q.offer(new Node(ob.v, nowcost+ob.c));

}

}

}

}

 

만약 문제에서 최단거리가 아닌 최장 거리를 구하라면 클래스의 정렬 순서와 다익스트라 메소드를 기존과 반대로 구현하면 될까요??

java 코딩-테스트

답변 1

1

김태원

안녕하세요^^

다익스트라 알고리즘은 최소비용을 구하기 위해 만들어진 알고리즘입니다. 최대비용을 구하기 위해 정렬순서를 바꾸고, 다익스트라 내용을 반대로 하면 while(!q.isEmpty())문이 무한반복을 하게 됩니다. 만약 그래프에 사이클(회로)가 존재하고, 해당 사이클을 계속 회전하게 되면 비용이 계속 커지므로 우선순위 큐가 텅 비어서 멈추는 일이 발생하지 않습니다.

문제에 있는 입력예제를 예로 들면 그래프에서 2번, 3번, 4번 정점은 사이클(회로)를 이룹니다. 그래서 1번 정점에서 2번 정점으로 가는 최대비용을 다익스트라로 구한다면 1번 정점에서 2번 정점으로 가는 12비용부터 시작해서 2번, 3번, 4번 사이클을 무한 회전하면서 그 갑은 12, 24, 36 ...... 과 같이 12의 배수로 무한 증가하면서 while(!q.isEmpty()) 문이 무한 반복할 겁니다.

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

33

1

갑자기 채점 사이트가 바뀌었어요

0

34

1

문제 리스트 페이지

0

29

1

채점 사이트 관련 질문드립니다

0

24

1

봉우리 문제 질문입니다

0

84

2

씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?

0

65

0

이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?

0

72

0

가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법

0

67

1

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

0

85

2

6-7 강의에서

0

48

1

6-6. 장난꾸러기 질문 있습니다.

0

45

1

강의 수강후 코딩테스트

0

111

1

answer 변수 사용 여부

0

46

1

2중 for문

1

85

2

2-11. 임시반장정하기 (Runtime Error)

0

63

1

혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?

0

70

1

이런 풀이는 어떨까요

0

44

1

자바 스트림 방식의 효율성 질문 드립니다.

0

57

1

알고리즘 자료 구조들..

0

63

1

StringBuilder vs BufferdWriter

0

48

1

원더랜드(프림)

0

50

1

이런 코드는 어떤가요?

0

61

1

bfs 풀이

0

57

1

병합정렬

0

57

1