CS/baekjoon

[백준 1744번] 수 묶기

hanjongho 2021. 4. 3. 17:22

http://www.acmicpc.net/problem/1744

 

1744번: 수 묶기

길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에

www.acmicpc.net

풀이)

음수 + 0 부분과 1 이상인 부분을 나누기 위해 one_idx를 먼저 잡은 뒤, 작은 쪽부터 수들을 묶어줬다. 양수를 묶을 때 체크할 부분은 1 + 1, 1 + 2는 곱한 것 보다 더한 것이 더 크기 때문에 이 부분을 따로 처리해주어야 한다.

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N, one_idx = 0, ans = 0;
	int arr[10001];

	cin >> N;
	for (int i = 0; i < N; i++)
		cin >> arr[i];
	sort(arr, arr + N);
	for (int i = 0; i < N; i++)
	{
		one_idx = i;
		if (arr[one_idx] >= 1)
			break ;
	}
	for (int i = 0; i < one_idx - 1; i += 2)
	{
		arr[i] = arr[i] * arr[i + 1];
		arr[i + 1] = 0;
	}
	for (int i = N - 1; i > one_idx; i -= 2)
	{
		arr[i] = max(arr[i] * arr[i - 1], arr[i] + arr[i - 1]);
		arr[i - 1] = 0;
	}
	for (int i = 0; i < N; i++)
		ans += arr[i];
	cout << ans;
	return (0);
}

 

 

제 코드는 절대 완벽하지 않습니다

더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!