Tags
- Study
- ๊น์ด ์ฐ์ ํ์
- ๊ทธ๋ํ ์ด๋ก
- CodingTest
- LV2
- ๊ทธ๋ํ ํ์
- ๊ต์ฌ
- DP
- ์ํ
- Brute Force Algorithm
- Dynamic Programming
- SpringBoot
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์
- ๋ฐฑํธ๋ํน
- PGM
- BOJ
- ์ ์๋ก
- ์ ๋ ฌ
- sort
- Python
- stack
- ๋๋น ์ฐ์ ํ์
- queue
- ์๋ฃ๊ตฌ์กฐ
- ๋ฌธ์์ด
- dfs
- BFS
- greedy
- Java
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_24042 : ํก๋จ๋ณด๋ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N๊ฐ์ ์ง์ญ๊ณผ M๊ฐ์ ํก๋จ๋ณด๋๊ฐ ์๋ค.
- ํก๋จ๋ณด๋๋ ์ ๋ ฅ ์์๋๋ก 0~M-1 ์ด์ ํ๋๋ถ์ด ์ผ์ ธ ๊ฑด๋ ์ ์๋ค.
- 1๋ฒ ์ง์ญ๋ถํฐ ์ถ๋ฐํด N๋ฒ ์ง์ญ์ ๋์ฐฉํ ์ ์๋ ์ต๋จ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- N์ด ์ต๋ 10๋ง, M์ด ์ต๋ 70๋ง์ด๋ฏ๋ก BFS๋ก ์ต๋จ์๊ฐ์ ๊ตฌํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค. ๋ฐ๋ผ์ Dijkstra(๋ค์ต์คํธ๋ผ) ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ์ต๋จ์๊ฐ์ ๊ตฌํ๋ค.
- ํ์ฌ ์ง์ญ์์ ๊ฐ ์ ์๋ ๋ค์ ์ง์ญ์ ๊ฑด๋ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณ์ฐํ๊ณ , ๊ธฐ๋ก ๋ ์์ ์๊ฐ๋ณด๋ค ์๋ค๋ฉด ์ ๋ฐ์ดํธํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
ArrayList<Sign>[] adjList = new ArrayList[N + 1]; // ๊ฒฝ๋ก+์๊ฐ
long[] result = new long[N + 1]; // ์ต๋จ ์๊ฐ
for (int i = 1; i <= N; i++) {
adjList[i] = new ArrayList<>();
result[i] = Long.MAX_VALUE;
}
for (int i = 1; i <= M; i++) {
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
adjList[A].add(new Sign(B, i));
adjList[B].add(new Sign(A, i));
}
// Dijkstra
Queue<Road> q = new PriorityQueue<>();
q.add(new Road(1, 0L));
result[1] = 0;
while (!q.isEmpty()) {
Road road = q.poll();
if (road.time > result[road.site]) { // ์ด๋ฏธ ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ ์ฒ๋ฆฌํจ
continue;
}
if (road.site == N) { // N ์ฐพ์
break;
}
// ์ต๋จ์๊ฐ ์
๋ฐ์ดํธ
for (Sign sign : adjList[road.site]) {
int temp = (int) (road.time % M); // ํ์ฌ ์๊ฐ์ ์ฃผ๊ธฐ ์์น
if (temp <= sign.minT) { // ์ด๋ฒ ์ฃผ๊ธฐ์ ์ด๋
temp = sign.minT - temp; // ์ถ๊ฐ๋๋ ์๊ฐ
} else { // ๋ค์ ์ฃผ๊ธฐ์ ์ด๋
temp = sign.minT + M - temp; // ์ถ๊ฐ๋๋ ์๊ฐ
}
if (result[sign.site] > road.time + temp) { // ๋ ์งง์ ๊ฒฝ์ฐ ์ฐพ์
result[sign.site] = road.time + temp; // ์
๋ฐ์ดํธ
q.add(new Road(sign.site, road.time + temp)); // ํ์๋ ๋ฃ๊ธฐ
}
}
}
// Output
bw.write(Long.toString(result[N]));
bw.flush();
}
private static class Sign {
int site;
int minT;
public Sign(int site, int minT) {
this.site = site;
this.minT = minT;
}
}
private static class Road implements Comparable<Road> {
int site;
long time;
public Road(int site, long time) {
this.site = site;
this.time = time;
}
@Override
public int compareTo(Road o) {
return Long.compare(this.time, o.time);
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๊ฐ ํก๋จ๋ณด๋์ ํ๋๋ถ์ด ์ผ์ง๋ ์๊ฐ๊ณผ ๋์ฐฉ์ง๋ฅผ ์ ์ฅํ๊ธฐ ์ํด Sign ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
- minT๋ ๋ถ์ด ์ผ์ง๋ ์๊ฐ์๊ณผ ๋์์, ํก๋จ๋ณด๋ ์ฃผ๊ธฐ์ ์ธ๋ฑ์ค์ด๋ค.
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ํด Road ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- ํ์ฌ ์ง์ญ ๋ฒํธ์ ๋์ฐฉํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ์ ์ฅํ๋ค.
- ์ฐ์ ์์ ํ์ ๋ฃ๊ธฐ ์ํด compareTo() ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉํ๋ค.
- ๊ฒฝ๋ก์ ์๊ฐ์ Signํด๋์ค๋ฅผ ์ธ์๋ก ๊ฐ๋ ArrayList ๋ฐฐ์ด adjList๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ๋ ฅ๋๋ ๊ฒฝ๋ก๋ฅผ ์๋ฐฉํฅ์ผ๋ก ์ ์ฅํ๋ค.
- ์ ๋ ฅ ์ธ๋ฑ์ค๋ฅผ minT๋ก ์ ์ฅํ๋ค.
- ์ต๋จ์๊ฐ์ ์ ์ฅํ long๋ฐฐ์ด result๋ฅผ Long์ ์ต๋๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
- ์ฐ์ ์์ ํ q์ Road ํด๋์ค๋ฅผ ์ธ์๋กํ๊ณ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋ค.
- N์ ์ฐพ์ ๋ ๊น์ง ์ต๋จ์๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
- ํ์ฌ ์๊ฐ์ ์ฃผ๊ธฐ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํด, ๋ค์ ๊ฒฝ๋ก์ ์๊ฐ์ด ์ด๋ฒ ์ฃผ๊ธฐ์ธ์ง ๋ค์ ์ฃผ๊ธฐ์ธ์ง ํ๋จํ๊ณ ์ถ๊ฐ ์๊ฐ์ ๊ณ์ฐํ๋ค.
- ์ด๋ฒ ๊ฒฝ๋ก๊ฐ result์ ์ ์ฅ ๋ ์๊ฐ๋ณด๋ค ์งง๋ค๋ฉด, result ๊ฐ์ ์ ๋ฐ์ดํธํ๊ณ ํ์ ๋ฃ์ด ๋ค์ ํ์ํ๋ค
- ์ต์ข result[N]์ ์ ์ฅ๋ ์ต์์๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์ด๋ ค์ ๋ค. ์ฒ์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์์ ์์์ง๋ง ๋ฌธ์ ์ดํด๋ ๋๋ฌด ์ด๋ ต๊ณ ํผ๋์ค๋ฌ์์ BFS๋ก ๋จผ์ ํ์ด๋ณด์๋ค.
- ๋น์ฐํ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๊ณ , ๊ฒฐ๊ตญ ์๊ณ ๋ฆฌ์ฆ ํ๊ทธ๋ฅผ ๋ณด๊ณ Dijkstra ์๊ณ ๋ฆฌ์ฆ์ธ๊ฑธ ์๊ณ ๋ค์ ํ์ด์ ์ด 1์๊ฐ+1์๊ฐ = 2์๊ฐ ์์๋ก ํ์ด๋ผ ์ ์์๋ค.
- ํก๋จ๋ณด๋ ์ฃผ๊ธฐ์ธ M์ด 70๋ง์ผ๋ก, ์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ค๊ฐ int๋ฅผ ๋์ ์ ์์ด long์ผ๋ก ์ ์ธํด์ผ ํ๋ค.
- ์ ๋ ฅ๋๋ ๊ฒฝ๋ก๋ฅผ ์ฃผ๊ธฐ ์ธ๋ฑ์ค(์๊ฐ)๊ณผ ํจ๊ป ์ ์ฅํ๋๊ฒ ์์ํ๋ค.
- ์ข ์๊ธด ์๊ธฐ์ง๋ง, ๋ฌธ์ ์ ์๊ฐ ์กฐ๊ฑด์ด ํ๋ฆฐ ์ค ์๊ณ ์ค๋ฅ ์์ ์ ๊ฑด์ํ ๋ป ํ๋ค.
- ํ๋๋ถ์ด 1์ด ~ M์ด์ ์ผ์ง๋ค๊ณ ์ดํด์, N=2์ผ๋ ๋์ฐฉํ๋ฉด 1์ด๊ฐ ์๋๋ผ 2์ด๊ฐ ์๋๊ฐ? ์ถ์๋ค.
- ํ์ง๋ง ๋ถ์ด ์ผ์ง๋ ๊ฑด 0์ด~M์ด์๋ค. ๋ฌธ์ ๋ฅผ ํ๊ณ ๋์๋ ์ดํด๋ฅผ ์ ๋ชปํ๋ ๋ถ๋ถ์ด ์๋๊ฒ ์๊ธฐ๊ณ ๋ฐ์ฑํ๊ฒ ๋๋ค...(๊ธ ์ฐ๋ฉด์ ๋ค์ ํ์ธํ๋ค๊ฐ ์๊ฒ๋๋ค. ์ฐ๊ธฐ์ ์ ์์์ ๋คํ์ด๋ค...)
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Lv.3 : ๊ณ ๊ณ ํ ์ต๊ณ ์ ๋ฐ๊ฒฌ (0) | 2024.08.15 |
---|---|
Lv.3 : ๊ณต ์ด๋ ์๋ฎฌ๋ ์ด์ (0) | 2024.08.02 |
BOJ_25945 : ์ปจํ ์ด๋ ์ฌ๋ฐฐ์น (0) | 2024.06.15 |
BOJ_4179 : ๋ถ! (0) | 2024.06.11 |
BOJ_1937 : ์์ฌ์์ด ํ๋ค (0) | 2024.06.10 |