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);
}
제 코드는 절대 완벽하지 않습니다
더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!