728x90
이 문제의 핵심은 어떻게 수를 묶을 것인가이다.
핵심을 파악하자면
음수는 음수끼리 양수는 양수끼리 묶는 게 결괏값이 더 커진다.
문제 접근 방법
- 음수는 음수끼리 양수는 양수 끼리 묶는다
- 가장 작은 음수는 그 다음 작은 음수와 묶는 것이 크고, 음수에 0을 곱하면 0 이 되기 때문에 이것 또한 작다.
- 양수는 가작 큰 양수와 그 다음 큰 양수를 묶으면 값이 커진다. 하지만 0을 곱하면 안 된다. 또한 1을 곱하면 자기 자신이기 때문에 1은 곱해주지 않고 그냥 더한다.
- 그래서 정렬을 해서 음수는 앞에서부터 양수는 뒤에서부터 계산을 해주면 된다.
음수 계산 방법
양수 계산 방법
2
1
2
답: 3
5
1
1
1
1
1
답: 5
이 반례들을 통해 1은 양수랑은 곱하지 않는것이 좋다는것을 이해했다!!
전체 코드
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int n, num[], result = 0;
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
num = new int[n];
for (int i = 0; i < n; i++) {
int next = Integer.parseInt(br.readLine());
num[i] = next;
}
Arrays.sort(num);// num[i+1]<=0
for (int i = 0; i < n; i++) {
if (num[i] <= 0) {
if(i==n-1) {
result += num[i];
}
else if (num[i + 1] <= 0) {
result += (num[i] * num[i + 1]);
i++;
} else
result += num[i];
} else {
break;
}
}
for (int i = n-1; i >=0 ; i--) {
if (num[i] > 0) {
if(i==0) {
result += num[i];
}
else if (num[i - 1] > 1) {
result += (num[i] * num[i - 1]);
i--;
} else
result += num[i];
} else {
break;
}
}
System.out.println(result);
}
}
'알고리즘' 카테고리의 다른 글
백준 20005 <보스몬스터 전리품> (0) | 2020.10.04 |
---|---|
백준 19953 <영재의 산책> (0) | 2020.10.03 |
백준 19952 <인성 문제있어??> (0) | 2020.09.30 |
백준 2589 <보물섬> (0) | 2020.09.29 |
백준 4811 <알약> (0) | 2020.09.26 |