본문 바로가기
이론/코딩테스트

[백준] 1744번 수 묶기 [그리디 알고리즘]

by 퇴근후개발 2022. 8. 18.
반응형

-문제

 

-코드

혼자 푼 코드, 좀 더 일반화 필요해보임  => 좋은 코드 : https://mygumi.tistory.com/220 

#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;

int main() 
{
	int n=0, sum=0 ,p=0;
	scanf("%d", &n);
	vector<int> a(n);

	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}

	sort(a.begin(), a.end());

	while (p <= n - 1)
	{
		if (a[p] <= 0)
		{
			if (p + 1 < n && a[p + 1] <= 0)
			{
				if (a[p] * a[p + 1] > a[p] + a[p + 1])
				{
					sum += a[p] * a[p + 1];
				}
				else
				{
					sum += a[p] + a[p + 1];
				}
				if (p < n - 2) p += 2;
				else break;
			}
			else
			{
				sum += a[p];
				break;
			}
		}
		else break;
	}

	p = n - 1;
	while (p >= 0)
	{
		if (a[p] > 0)
		{
			if (p - 1 >= 0 && a[p -1] > 0)
			{
				if (a[p] * a[p - 1] > a[p] + a[p - 1])
				{
					sum += a[p] * a[p - 1];
				}
				else
				{
					sum += a[p] + a[p - 1];
				}

				if (p >= 2) p -=2;
				else break;
			}
			else
			{
				sum += a[p];
				break;
			}
		}
		else break;
	}
		
	printf("%d", sum);
	return 0;
}
반응형