Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 싸피 면접 후기
- 싸피 합격
- 동기화
- 뮤텍스
- 플로이드 와샬
- Dijkstra Algorithm
- 삼성 청년 SW 아카데미
- floyd-warshall
- 다익스트라 알고리즘
- 프록시서버
- SSAFY
- 세마포어
- Proxy Server
- 호스팅이란?
- 싸피
- 세마포어와 뮤텍스의 차이
- Synchronization
- 프록시
- 다익스트라
- 웹 호스팅
- 클라우드 서버
- 세마포어란?
- Proxy
- 호스팅
- 최단 경로
- 세마포어와 뮤텍스
- 플로이드 워셜
- 뮤텍스란?
- 서버 호스팅
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[프로그래머스][Level3][자바] 가장 먼 노드 본문
programmers.co.kr/learn/courses/30/lessons/49189
import java.io.*;
import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
int answer = 0;
List<Edge>[] map = new List[n];
for(int i=0; i<n; i++) {
map[i] = new ArrayList<>();
}
//리스트에 담아주기
for(int i=0; i<edge.length; i++) {
map[edge[i][0]-1].add(new Edge(edge[i][1]-1, 1));
map[edge[i][1]-1].add(new Edge(edge[i][0]-1, 1));
}
//다익스트라 변수 선언
int[] distance = new int[n];
boolean[] visited = new boolean[n];
PriorityQueue<Vertex> pq = new PriorityQueue<>();
//무한대 대신 Integer.MAX_VALUE로 설정
Arrays.fill(distance, Integer.MAX_VALUE);
// 노드 1번부터 시작
distance[0] = 0;
pq.offer(new Vertex(0,0));
while(!pq.isEmpty()) {
Vertex curr = pq.poll();
if(visited[curr.no]) continue;
visited[curr.no] = true;
for(int i=0; i<map[curr.no].size(); i++) {
Edge tmp = map[curr.no].get(i);
//최소값 갱신
if(!visited[tmp.end] && distance[tmp.end] > tmp.wight + curr.totalDistance) {
distance[tmp.end] = tmp.wight + curr.totalDistance;
pq.offer(new Vertex(tmp.end, distance[tmp.end]));
}
}
}
//맥스 값 찾기
int max =0;
for(int i=0; i<n; i++) {
// 1과 연결이 안된 노드가 존재할 수 있다.
if(distance[i] == Integer.MAX_VALUE) continue;
max = Math.max(max, distance[i]);
}
for(int i=0; i<n; i++) {
if(distance[i] == max) answer++;
}
return answer;
}
static class Vertex implements Comparable<Vertex>{
int no;
int totalDistance;
public Vertex(int no, int totalDistance) {
super();
this.no = no;
this.totalDistance = totalDistance;
}
@Override
public int compareTo(Vertex o) {
return this.totalDistance - o.totalDistance;
}
}
static class Edge{
int end;
int wight;
public Edge(int end, int wight) {
super();
this.end = end;
this.wight = wight;
}
}
public static void main(String[] args) {
new Solution().solution(6, new int[][] {{3, 6}, {4, 3}, {3, 2}, {1, 3}, {1, 2}, {2, 4}, {5, 2}});
}
}
정리
다익스트라 알고리즘을 알고 있다면 쉽게 풀 수 있는 문제이다. gooweon.tistory.com/67
- 이 문제에는 가중치가 따로 없기 때문에 임의로 1을 넣어주었다.
- 1번 노드부터 각 노드의 최소 값을 경신하고 나서 distance 배열을 검사하는데 Integer.MAX_VALUE 값이 존재한다면 1과 이어져 있지 않은 노드가 있기에 걸려줘야 한다. 최댓값을 구하고
- 해당 최대값과 일치한 노드들의 개수를 체크해주면 된다.
'알고리즘 > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스][찾아라 프로그래밍 마에스터][자바] 게임 맵 최단거리 (0) | 2021.05.10 |
---|---|
[프로그래머스][2020 카카오 인턴십][자바스크립트] 키패드 누르기 (0) | 2021.05.07 |
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][자바스크립트] 프렌즈4블록 (0) | 2021.05.06 |
[프로그래머스][2019 KAKAO BLIND RECRUITMENT][자바스크립트] 실패율 (0) | 2021.05.05 |
[프로그래머스][2020 KAKAO BLIND RECRUITMENT][자바스크립트] 괄호 변환 (0) | 2021.05.04 |
Comments