문제 출처
https://www.acmicpc.net/problem/1744
접근 방식 및 풀이
- Greedy 알고리즘 이용
- 아래 조건을 만족하는 알고리즘 사용
- 조건 1. 음수* 음수, 양수*양수 최대값, 단! (양수 *1)은 (양수+1)값보다 작으므로 조건처리
- 조건 2. 음수*0은 최대값
- 참고 블로그
https://mygumi.tistory.com/220
소스 코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
long ans =0;
for (int i = 0; i <n ; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int left = 0;
int right = n-1;
ans = 0;
// 0, 음수일 경우 처리
for (; left < right ; left+=2) {
if(arr[left] <1 && arr[left+1] < 1){
ans += arr[left] * arr[left+1];
}else{
break;
}
}
// 양수일 경우 처리
for (; right >0; right-=2) {
// 1과는 곱하지 않게 조건문 추가.
if(arr[right] >1 && arr[right-1] > 1){
ans += arr[right] * arr[right-1];
}else{
break;
}
}
//남은 값들은 더해주기
for (; right >= left; right--) {
ans += arr[right];
}
System.out.println(ans);
}
}
결과
'Competition > Baekjoon' 카테고리의 다른 글
[백준] 1783번 자바 병든 나이트 (0) | 2020.04.05 |
---|---|
[백준] 11729번 하노이의 탑 (0) | 2020.04.03 |
[백준] 11728번 자바 배열 합치기 (0) | 2020.04.02 |