๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/4883)
< ์ผ๊ฐ ๊ทธ๋ํ >
๋ฌธ์ ํ์ด
์ฒ์์๋ ๊ฐ์ฅ ์์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์์๋ถํฐ ์์ํด์ Queue๋ฅผ ์ฌ์ฉํด์ ์ด๋ํ๋ ๊ณณ๋ง๋ค ์ ์ฅํ์ฌ ์ต์ ๋น์ฉ์ ๊ตฌํ๋๋ก ๊ตฌํํ๋ค. ํ์ง๋ง ์ค๋ณต๋๋ ์์น๊ฐ ์์ด์ ๊ทธ๋ฐ์ง ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ผ๊ฐ ๊ทธ๋ํ ๊ฐ ์ ์ ์์ ์ด๋ํ ์ ์๋ ์์น๋ ์ค๋ฅธ์ชฝ, ์ค๋ฅธ์ชฝ ์๋, ์๋, ์ผ์ชฝ ์๋ ์ด 4๊ฐ์ง ๊ฒฝ์ฐ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ ์ ์์์๋ถํฐ, ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ํด๋ ๋๋ค๋ ๋ป์ด๋ค. ์ผ์ชฝ์ผ๋ก ์ด๋ํ ์ ์๊ณ , ์๋ก ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, ๋น์ฉ์ ์ ๊ณฑ์ด 1,000,000์ด๋ฏ๋ก ๋น์ฉ์ด ์์์ผ ์ ๋ ์๋ค๋ ๋ป์ด๋ฏ๋ก ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฐฐ์ด์ ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํ๋ฉด ์ ํํ ๋ต์ ๊ตฌํ ์ ์์ผ๋ฏ๋ก Integer.MAX_VALUE๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐํํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class _4883_ { // ์ผ๊ฐ ๊ทธ๋ํ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int dx[] = { 0, 1, 1, 1 };
int dy[] = { 1, 1, 0, -1 };
int arr[][], result[][];
int n = 0;
int idx = 1;
while ((n = Integer.parseInt(bf.readLine())) != 0) {
arr = new int[n][3];
result = new int[n][3];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
for (int j = 0; j < 3; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
result[i][j]=Integer.MAX_VALUE;
}
}
result[0][1] = arr[0][1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
if (result[i][j] != Integer.MAX_VALUE) {
for (int k = 0; k < 4; k++) {
int x = i + dx[k];
int y = j + dy[k];
if (x >= 0 && x < n && y >= 0 && y < 3) {
if (result[x][y] == Integer.MAX_VALUE || (result[x][y] > result[i][j] + arr[x][y])) {
result[x][y] = result[i][j] + arr[x][y];
}
}
}
}
}
}
bw.write(idx++ + ". " + result[n - 1][1] + "\n");
}
bw.flush();
}
}
๋ณ์)
dx, dy : ์ค๋ฅธ์ชฝ, ์ค๋ฅธ์ชฝ ์๋, ์๋, ์ผ์ชฝ ์๋
arr : ์ ์ ์ ๋น์ฉ
result : ์ต์ ๋น์ฉ
n : ๊ทธ๋ํ ํ์ ๊ฐ์
idx : ํ ์คํธ ์ผ์ด์ค ๋ฒํธ
์ ์ ์ ๋น์ฉ์ ์ ๋ ฅ๋ฐ์ผ๋ฉด์ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฐฐ์ด์ Ineger.MAX_VALUE๋ก ์ด๊ธฐํํ๋ค. ๊ฐ์ฅ ์์ชฝ ๊ฐ์ด๋ฐ๋ถํฐ ์์ํ๋ฏ๋ก ๊ฐ์ฅ ์์ชฝ ๊ฐ์ด๋ฐ ๊ฐ์ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฐฐ์ด(result)์ ์ ์ฅํ๋ค. ๊ทธ ํ result ๋ฐฐ์ด์ ์ ์ฒด ํ์ํ๋ฉด์ ๊ฐ์ด Integer.MAX_VALUE๊ฐ ์๋ ์์น๋ฅผ ์ค๋ฅธ์ชฝ, ์ค๋ฅธ์ชฝ ์๋, ์๋, ์ผ์ชฝ ์๋๋ก ์ด๋ํ์ฌ ์ต์๊ฐ์ธ์ง ํ์ธ ํ ๊ฐ์ ๋ฐ๊พผ๋ค.
์ต์ข ํ ์คํธ ์ผ์ด์ค ๋ฒํธ์ ๊ฐ์ฅ ์๋์ชฝ ๊ฐ์ด๋ฐ ์ ์ ์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1283_๋จ์ถํค ์ง์ (1) | 2023.12.07 |
---|---|
[Baekjoon] 1446_์ง๋ฆ๊ธธ (0) | 2023.12.06 |
[Baekjoon] 12026_BOJ ๊ฑฐ๋ฆฌ (1) | 2023.12.04 |
[Baekjoon] 2529_๋ถ๋ฑํธ (1) | 2023.12.01 |
[Baekjoon] 1890_์ ํ (1) | 2023.11.30 |