Tags
- ๊ต์ฌ
- CodingTest
- Brute Force Algorithm
- ๊ทธ๋ํ ์ด๋ก
- ์๋ฎฌ๋ ์ด์
- LV2
- ๊ตฌํ
- sort
- Python
- dfs
- ์๋ฃ๊ตฌ์กฐ
- greedy
- Dynamic Programming
- ์ํ
- ๊ทธ๋ํ ํ์
- ์ ์๋ก
- Study
- queue
- PGM
- BFS
- ๊น์ด ์ฐ์ ํ์
- ๋ฌธ์์ด
- ์ ๋ ฌ
- SpringBoot
- stack
- ๋ฐฑํธ๋ํน
- Java
- DP
- ๋๋น ์ฐ์ ํ์
- BOJ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1916 : ์ต์๋น์ฉ ๊ตฌํ๊ธฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N๊ฐ์ ๋์๊ฐ ์๊ณ , M๊ฐ์ ๋ฒ์ค๊ฐ ์๋ค.
- M๊ฐ์ ๋ฒ์ค๋ ํ ๋์์์ ๋ค๋ฅธ ๋์๊น์ง ๋๋ ๋ฒ์ค ๋น์ฉ์ด ์๋ค.
- ์ถ๋ฐ ๋์๋ถํฐ ๋์ฐฉ์ง ๋์๊น์ง ๋ฒ์ค ๋น์ฉ์ ์ต์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
- ์ ํ์ ์ธ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ด๋ค.
- ๊ทธ๋ํ์์ ํ ์ ์ ์์ ํน์ ์ ์ ๊น์ง์ ์ต์๋น์ฉ์ ๊ตฌํด์ผ ํ๋ค.
- M๊ฐ์ ๋ฒ์ค๋ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ์ ๋ํ๋ธ๋ค.
- ๋ชฉ์ ์ง๊ฐ ๋์ฌ ๋ ๊น์ง, ๊ฐ ์ ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ ํด๊ฐ๋ค.
- ๋ชฉ์ ์ง์ ๋ฐฉ๋ฌธํ๋ฉด ๊ทธ๋์ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
private static class City implements Comparable<City> {
int num;
long weight;
public City(int num, long weight) {
this.num = num;
this.weight = weight;
}
@Override
public int compareTo(City o) {
return Long.compare(this.weight, o.weight);
}
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
boolean[] visited = new boolean[N+1];
ArrayList<City>[] adjList = new ArrayList[N+1];
for (int i = 0; i <= N; i++) {
adjList[i] = new ArrayList<>();
}
StringTokenizer st = null;
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
adjList[Integer.parseInt(st.nextToken())].add(new City(Integer.parseInt(st.nextToken()), (long)Integer.parseInt(st.nextToken())));
}
// Dijkstra
PriorityQueue<City> pq = new PriorityQueue<>();
st = new StringTokenizer(br.readLine());
pq.add(new City(Integer.parseInt(st.nextToken()),0));
int end = Integer.parseInt(st.nextToken());
int cur;
long min = 0;
while (!pq.isEmpty()){
City city = pq.poll();
cur = city.num;
min = city.weight;
if (cur == end) break;
visited[cur] = true;
for (City adjCity : adjList[cur]) {
if (!visited[adjCity.num]) {
pq.add(new City(adjCity.num, min+ adjCity.weight));
}
}
}
System.out.println(min);
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋์ ๋ฒํธ์ ๋น์ฉ์ ๊ฐ๊ณ ์๋ City ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
- ๋ฐฉ๋ฌธ ๊ด๋ฆฌ๋ฅผ ์ํด boolean ๋ฐฐ์ด visited๋ฅผ ๋ง๋ค์ด ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ณ์ฐ ๋ ๋์๋ค์ ์ฒดํฌํ๋ค.
- ArrayList<City>๋ฐฐ์ด adjList๋ก M๊ฐ์ ๋ฒ์ค ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์ธ์ ๋ฆฌ์คํธ๋ก ์ฌ์ฉํ๋ค.
- Dijkstra ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ์ต์๋น์ฉ์ ๊ตฌํ๋ค.
- PriorityQueue๋ก ์์ ์ ์ ์ผ๋ก๋ถํฐ ์ต์ ๋น์ฉ์ ์ ์ ๋ค์ ์ฐจ๋ก๋ก ํ์ธํ๊ณ ๋ฐฉ๋ฌธ์ฒดํฌํ๋ค.
- ๋ฐฉ๋ฌธํ ์ ์ ์ด ๋ชฉ์ ์ง๋ฉด ์ข ๋ฃํ๊ณ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.
- ๋ฐฉ๋ฌธํ ์ ์ ์ด ๋ชฉ์ ์ง๊ฐ ์๋๋ผ๋ฉด, ์ธ์ ํ ์ ์ ๋ค์ ๊ฑฐ๋ฆฌ+ํ์ฌ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ pq์ ์ถ๊ฐํ๋ค.
๐ธ end ๐ธ
- ๋ค์ต์คํธ๋ผ๋ฅผ ๊ณต๋ถํ๊ณ ์ฒ์์ผ๋ก ์ง์ ๊ตฌํํด๋ดค๋๋ฐ, ์๋ฆฌ๋ฅผ ์์ง์๋๊ฒ ์ค์ํ ๊ฒ ๊ฐ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_9019 : DSLR (0) | 2023.03.21 |
---|---|
BOJ_14502 : ์ฐ๊ตฌ์ (0) | 2023.03.08 |
BOJ_1717 : ์งํฉ์ ํํ (0) | 2023.03.08 |
BOJ_1926 : ๊ทธ๋ฆผ (0) | 2023.03.05 |
BOJ_3109 : ๋นต์ง (0) | 2023.02.22 |