반응형
문제
https://www.acmicpc.net/problem/1744
풀이
1. 1 보다 큰 양수는 2개를 곱했을 때 더한 것 보다 무조건 크다. 그러므로 1보다 큰 두 수는 묶어야 한다. 1은 다른 수랑 곱하는 것보다 혼자 더 했을때 결과가 더 커진다.
2. 음수는 2개이상 있을 때 곱셈을 통해 양수가 되므로 2개 이상일 때 음수는 묶어야 한다.
3. 0은 2개로 묶여지지 않은 남겨진 음수와 묶어야 한다. 음수 보단 0이 더했을 때 결과가 더 커진다. 남은 음수가 없을 경우 0은 그냥 더하면 된다.
결과가 커지기 위해서 정렬을 먼저 하고 연산을 시작한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int result;
int arr[10000];
int main()
{
cin.tie(0);
ios::sync_with_stdio(0);
cin >> N;
for (int i=0; i<N; i++) cin >> arr[i];
sort(arr, arr+N);
// 음수 처리
for (int i=0; arr[i] <= 0 && i < N;)
{
if (arr[i + 1] <= 0 && i < N - 1)
{
result += arr[i] * arr[i+1];
i+=2;
}
else result += arr[i++];
}
reverse(arr, arr+N);
// 양수 처리
for (int i=0; arr[i] > 0 && i < N;)
{
if (arr[i + 1] > 1 && i < N - 1)
{
result += arr[i] * arr[i+1];
i+=2;
}
else result += arr[i++];
}
cout << result;
return 0;
}
|
cs |
반응형
'BOJ' 카테고리의 다른 글
백준 1197 - 최소 스패닝 트리 (0) | 2019.12.26 |
---|---|
백준 1167 - 트리의 지름 (0) | 2019.11.15 |
백준 1697 - 숨바꼭질 (0) | 2019.10.02 |
백준 2875 - 대회 or 인턴 (0) | 2019.09.30 |
백준 2304 - 창고 다각형 (0) | 2019.09.29 |