๊ธฐ๋ก๋ฐฉ

BOJ_2096 : ๋‚ด๋ ค๊ฐ€๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2096 : ๋‚ด๋ ค๊ฐ€๊ธฐ

Soom_1n 2023. 8. 3. 21:42

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2096๋ฒˆ: ๋‚ด๋ ค๊ฐ€๊ธฐ

์ฒซ์งธ ์ค„์— N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ˆซ์ž๊ฐ€ ์„ธ ๊ฐœ์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž๋Š” 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ ๋œ๋‹ค.

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N * 3 ๋ณด๋“œํŒ์„ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์ตœ๋Œ€,์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
  • ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.
  • ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ, ์—ญ์œผ๋กœ ์ด์ „ ์ค„์„ ๋ณด๊ณ  ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์„ ๊ณ ๋ฅด๋Š” DP ๋ฐฉ์‹์œผ๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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 Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;

		int N = Integer.parseInt(br.readLine());
		int[][] map = new int[N + 1][3];
		int[][][] dp = new int[N + 1][3][2];

		for (int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < 3; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		int[][] dy = {{0, 1}, {-1, 0, 1}, {-1, 0}};

		int max, min;
		for (int i = 1; i <= N; i++) {
			for (int j = 0; j < 3; j++) {
				max = 0;
				min = Integer.MAX_VALUE;
				for (int k = 0; k < dy[j].length; k++) {
					max = Math.max(max, dp[i - 1][j + dy[j][k]][0]);
					min = Math.min(min, dp[i - 1][j + dy[j][k]][1]);
				}
				dp[i][j][0] = max + map[i][j];
				dp[i][j][1] = min + map[i][j];
			}
		}

		max = 0;
		min = Integer.MAX_VALUE;
		for (int i = 0; i < 3; i++) {
			max = Math.max(max, dp[N][i][0]);
			min = Math.min(min, dp[N][i][1]);
		}
		sb.append(max).append(' ').append(min);

		bw.write(sb.toString());
		bw.flush();
	}
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋ณด๋“œํŒ์˜ ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ๋‚ด๋ ค๊ฐ€๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด dy์— ์ €์žฅํ–ˆ๋‹ค.
    (์‹ค์ œ๋กœ๋Š” ์˜ฌ๋ ค๋‹ค๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค)
  • N์ค„์„ ํ•˜๋‚˜์”ฉ ๋‚ด๋ ค๊ฐ€๋ฉฐ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • ๊ฐ€๋กœ 3์นธ์„ ๊ธฐ์ค€์œผ๋กœ ์ด์ „ ์ค„์—์„œ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
    • ๊ตฌํ•œ ๊ฐ ์นธ์˜ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’ + ํ•ด๋‹น ์นธ์˜ ๋ณด๋“œํŒ ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ€์žฅ ์•„๋ž˜์ค„์—์„œ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ์—” DFS + ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€๋‚˜์„œ ์งˆ๋ฌธ์„ ์ฐธ๊ณ ํ•ด DP๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.
    • ์ฝ”ํ…Œ๋ฅผ ์˜ค๋žœ๋งŒ์— ํ’€์–ด์„œ ๊ฐ„๋‹จํ•œ DP์ธ๋ฐ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋ฌธ์ œํƒœ๊ทธ์— ์Šฌ๋ผ์ด๋”ฉ์œˆ๋„์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์•„๋Š” ๋ฐฉ์‹์˜ ํ”Œ์ด๊ฐ€ ๋”ฐ๋กœ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ๋ฌด์Šจ ๋œป์ผ๊นŒ ์ฐพ์•„๋ณด์•˜๋‹ค.
    • dp์—์„œ ํ…Œ์ด๋ธ”์„ ์žฌํ™œ์šฉํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋ผ๋Š” (ํ”ํžˆ ํ† ๊ธ€๋ง์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”) ํ…Œํฌ๋‹‰์„ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋ผ๊ณ  ๋ถ€๋ฆฌ๋„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. (์งˆ๋ฌธ)

728x90