๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 4883_์‚ผ๊ฐ ๊ทธ๋ž˜ํ”„

๋ฟŒ์•ผ._. 2023. 12. 5. 14:19

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: 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