Hello Ocean! ๐ŸŒผ

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””] ์•Œ๊ณ ์ŠคํŒŸ #TRIANGLEPATH ๋ณธ๋ฌธ

Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””] ์•Œ๊ณ ์ŠคํŒŸ #TRIANGLEPATH

bba_dda 2020. 4. 13. 00:59
๋ฐ˜์‘ํ˜•

[๋ฌธ์ œ]

์‚ผ๊ฐํ˜• ๋ชจ์–‘์œผ๋กœ ๋ฐฐ์น˜๋œ ์ˆ˜๋“ค์ด ์žˆ๋‹ค.

์ด ์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ค๋Š” ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“œ๋ ค๊ณ  ํ•œ๋‹ค.

์•„๋ž˜ ์ค„๋กœ ๋‚ด๋ ค๊ฐˆ ๋•Œ ๋งˆ๋‹ค, ๋ฐ”๋กœ ์•„๋žซ์นธ์ด๋‚˜ ํ•œ์นธ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์นธ์œผ๋กœ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์ง€๋‚˜์˜จ ๊ฒฝ๋กœ์ƒ์˜ ๋ชจ๋“  ์ˆ˜์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด๋ผ. 

 

[Input]

C (testcase ์ˆ˜)

๊ฐ testcase๋งˆ๋‹ค 

n (์ธต์˜ ๊ฐœ์ˆ˜)

n์ค„์— ๊ฑธ์ณ ์‚ผ๊ฐํ˜• ๊ฐ ๊ฐ€๋กœ์ค„์— ์žˆ๋Š” ์ˆซ์ž ์ž…๋ ฅ 

 

[Output]

๊ฐ testcase๋งˆ๋‹ค ์ตœ๋Œ€ ๊ฒฝ๋กœ ์ˆซ์ž์˜ ํ•ฉ

 

[ํ’€์ด]

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์œ„์™€ ๊ฐ™๋‹ค. dynamic programming์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ์œ„์— ์นธ๊ณผ์˜ ๊ฒฝ์šฐ์˜์ˆ˜๋งŒ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žก๋„๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณต์žก๋„๋Š” O(n^2)์ด๋‹ค. 

 

์ข€ ๋” ํฐ input์˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

[์ฝ”๋“œ]

 

#include <stdio.h>
#include <iostream>
#include <algorithm>

using namespace std;
int main() {
	int C,n;
	int triangle[101][101];
	int cache[101][101];
	scanf_s("%d", &C);
	for (int i = 0;i < C;i++) {
		scanf_s("%d", &n);
		for (int j = 0;j < n;j++) {
			for (int k = 0;k <= j;k++) {
				scanf_s("%d", &triangle[j][k]);
			}
		}
		cache[0][0] = triangle[0][0];
		int maxSum;
		for (int j = 1;j < n;j++) {
			maxSum = cache[j - 1][0];
			cache[j][0] = triangle[j][0] + maxSum;
			for (int k = 1;k <= j;k++) {
				maxSum = (cache[j - 1][k] > cache[j - 1][k - 1]) ? cache[j - 1][k] : cache[j - 1][k - 1];
				cache[j][k] = maxSum + triangle[j][k];
			}
		}
		maxSum = *max_element(cache[n - 1], cache[n - 1] + n);
		printf("%d\n",maxSum);
	}
}

 

[์ œ์ถœ ๊ฒฐ๊ณผ]

 

๋ฐ˜์‘ํ˜•