๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 15645_๋‚ด๋ ค๊ฐ€๊ธฐ 2

๋ฟŒ์•ผ._. 2026. 1. 20. 10:41
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/15645)

< ๋‚ด๋ ค๊ฐ€๊ธฐ 2 >

 

๋ฌธ์ œ ํ’€์ด 

 

dp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์œ„์น˜์—์„œ ๋ฐ”๋กœ ์œ„์˜ ์ˆ˜, ๋ฐ”๋กœ ์œ„์˜ ์ˆ˜์™€ ๋ถ™์–ด์žˆ๋Š” ์ˆ˜๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ์ตœ๋Œ€ ์ ์ˆ˜, ์ตœ์†Œ ์ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. 

 

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 _15645_ { // ๋‚ด๋ ค๊ฐ€๊ธฐ 2

	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 n = Integer.parseInt(bf.readLine());

		int arr[][] = new int[n][3];

		int maxDp[][] = new int[n][3];
		int minDp[][] = 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());
				minDp[i][j] = Integer.MAX_VALUE;
			}
		}

		for (int i = 0; i < 3; i++) {
			maxDp[0][i] = arr[0][i];
			minDp[0][i] = arr[0][i];
		}

		for (int i = 1; i < n; i++) {
			for (int j = 0; j < 3; j++) {
				if (j - 1 >= 0) {
					maxDp[i][j] = Math.max(maxDp[i][j], maxDp[i - 1][j - 1] + arr[i][j]);
					minDp[i][j] = Math.min(minDp[i][j], minDp[i - 1][j - 1] + arr[i][j]);
				}
				if (j + 1 < 3) {
					maxDp[i][j] = Math.max(maxDp[i][j], maxDp[i - 1][j + 1] + arr[i][j]);
					minDp[i][j] = Math.min(minDp[i][j], minDp[i - 1][j + 1] + arr[i][j]);
				}
				maxDp[i][j] = Math.max(maxDp[i][j], maxDp[i - 1][j] + arr[i][j]);
				minDp[i][j] = Math.min(minDp[i][j], minDp[i - 1][j] + arr[i][j]);
			}
		}

		int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
		for (int i = 0; i < 3; i++) {
			max = Math.max(max, maxDp[n - 1][i]);
			min = Math.min(min, minDp[n - 1][i]);
		}

		bw.write(max + " " + min);
		bw.flush();
	}
๋ณ€์ˆ˜)
n : ์ž…๋ ฅ๊ฐ’ 
arr : ๊ฒŒ์ž„ ์ ์ˆ˜
maxDp, minDp : ์ตœ๋Œ€ ์ ์ˆ˜, ์ตœ์†Œ ์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด 
max, min : ์ตœ๋Œ€ ์ ์ˆ˜, ์ตœ์†Œ ์ ์ˆ˜ 

 

n์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. n ์ค„ ๋งŒํผ ๊ฒŒ์ž„ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋ฐฐ์—ด arr์— ์ €์žฅํ•œ๋‹ค. maxDp์™€ minDp์˜ 0๋ฒˆ์งธ ํ–‰์„ arr 0๋ฒˆ์งธ ํ–‰์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , 1ํ–‰ ~ n-1ํ–‰๊นŒ์ง€ ([i-1][j-1]์—์„œ ๋‚ด๋ ค์˜ค๊ธฐ, [i-1][j+1]์—์„œ ๋‚ด๋ ค์˜ค๊ธฐ, [i-1][j]์—์„œ ๋‚ด๋ ค์˜ค๊ธฐ) ์ค‘์— ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด ๊ฐ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. 

 

์ตœ์ข… maxDp์™€ minDp์˜ [n-1][i]๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ตœ๋Œ€ ์ ์ˆ˜์™€ ์ตœ์†Œ ์ ์ˆ˜๋ฅผ ๊ตฌํ•ด ์ถœ๋ ฅํ•œ๋‹ค.