Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 1912๋ฒˆ - ์—ฐ์†ํ•ฉ (C++)

moaoh 2023. 7. 6. 00:26

๋ฌธ์ œ

n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ž„์˜์˜ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ์ค‘ ์—ฐ์†๋œ ๋ช‡ ๊ฐœ์˜ ์ˆ˜๋ฅผ ์„ ํƒํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ฉ ์ค‘ ๊ฐ€์žฅ ํฐ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ, ์ˆ˜๋Š” ํ•œ ๊ฐœ ์ด์ƒ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 ์ด๋ผ๋Š” ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž. ์—ฌ๊ธฐ์„œ ์ •๋‹ต์€ 12+21์ธ 33์ด ์ •๋‹ต์ด ๋œ๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ n(1 โ‰ค n โ‰ค 100,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” -1,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

10
10 -4 3 1 5 6 -35 12 21 -1

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

33

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

10
2 1 -4 3 4 -4 6 5 -5 1

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

14

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

5
-1 -2 -3 -4 -5

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

-1

 


ํ’€์ด๊ณผ์ •

์ด์ „์— ํ’€๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ ์‹คํŒจํ–ˆ์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ ์ด๋ฒˆ์— ์ƒˆ๋กญ๊ฒŒ ํ’€์–ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „์— ๊ตฐ๋Œ€์— ๋“ค์–ด๊ฐ€๊ธฐ์ „ 3๋…„์ „์ฏค์— ๋„์ „ํ–ˆ๋‹ค๊ฐ€ ํ‹€๋ฆฌ๊ณ  ๋ชจ๋ฅด๊ฒ ๋‹คํ•˜๊ณ  ์•ˆ๊ฑด๋“œ๋ ธ์—ˆ๋˜ ๋ฌธ์ œ์˜€์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— ๋‹ค์‹œ ๋„์ „ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int a[100000];

int main(void) {
	
	int n, i, j, num = 0, b = -1000;
	scanf("%d", &n);
	for(i = 0;  i < n; i++) {
		scanf("%d", &a[i]);
	}
	for(i = 0; i < n; i++) {
		if(b < a[i]) b = a[i];
		if(a[i] > 0) {
			num = 0;
			for(j = i; ; j++) {
				if(a[j] >= 0 && j <= n)
					num += a[j];
				else break;
			}
			if(b < num) b = num;
		}
	}
	printf("%d", b);
	
	return 0;
}

์ด์ „์— ๋งŒ๋“ค์—ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ปดํ“จํ„ฐ๋กœ ์ง์ ‘๋Œ๋ฆด๋ ค๊ณ ํ•˜๊ณ  ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐ์„ ํ•ด์„œ 2์ค‘for๋ฌธ๊นŒ์ง€ ์‚ฌ์šฉํ•ด๊ฐ€๋ฉฐ ํ’€๋ ค๊ณ  ํ–ˆ๋˜๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ๋‹ค์‹œ ๋ฌธ์ œ๋ฅผ ๋ด๋ณด๋‹ˆ 

์‹œ๊ฐ„์ œํ•œ์ด 1์ดˆ์— ์ถ”๊ฐ€์‹œ๊ฐ„์—†์Œ์ด ๋‚˜์™€์žˆ๋Š”๊ฑฐ๋ฅผ ๋ณด๋‹ˆ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”์—†์ด ๋กœ์ง์„ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑ์„ ํ•ด๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ณด๊ณ  ์–ด๋–ป๊ฒŒํ•ด์•ผ ์‹์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ํ’€ ์ˆ˜ ์žˆ์„๊นŒ๋Š” ๊ณ ๋ฏผํ•ด๋ดค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋ณด๋‹ˆ ์ง„์งœ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”์—†์ด ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•˜๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š”๋‹ค๋Š” ์ ์„ ๊นจ๋‹ซ๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

code

#include <iostream>

int		main(void)
{
	int n, temp;
	long long max = -1001, sum = 0;
	std::cin >> n;
	for(int i = 0; i < n; i++) {
		std::cin >> temp;
		sum += temp;
		if (max < sum) max = sum;
		if (sum < 0) sum = 0;
	}
	std::cout << max;

	return (0);
}


ํ›„๊ธฐ

์กฐ๊ธˆ ๋” ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ์œผ๋ฉด ๊ธˆ๋ฐฉ ํ’€์—ˆ์„ ๋ฌธ์ œ์ธ๊ฑฐ๊ฐ™์€๋ฐ ์ ‘๊ทผ์„ ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ๋‹ค๊ฐ€๊ฐ€์„œ ๋” ํž˜๋“ค์—ˆ๋˜ ๊ฑฐ ๊ฐ™๋‹ค.

๋กœ์ง์„ ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ์ƒ๊ฐ์„ ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๊ฐ€์žฅ ์ข‹์€ ๋กœ์ง์„ ์ƒˆ์šธ ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผ์„ ํ•ด๋ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

๋Œ“๊ธ€์ˆ˜0