https://www.acmicpc.net/problem/1744
문제
풀이
그냥 완전 그리디 노가다..
1보다 큰 수들 => 높은 수 순으로 2개씩 묶음 , 나머지들은(1이 있거나 하나 남았거나) 그냥 합산
0보다 작은 수들 => 2개씩 묶으면 양수가 되기때문에 제일 작은 수 순으로 2개씩 묶음. 하나 남은 음수는 0 이 있으면
그냥 패스 하거나 0이 없으면 그냥 더해주면 끝
1보다 큰수 , 0 , 0보다 작은수를 list 3개 만들어서 각각 따로 넣어주고 정렬해서 스타트
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
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static LinkedList<Integer>[] list = new LinkedList[3];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
for(int i=0;i<3;i++) list[i] = new LinkedList<>();
for (int i = 0; i < N; i++) {
int input = Integer.parseInt(br.readLine());
if(input > 0) list[2].add(input);
else if(input < 0) list[0].add(input);
else list[1].add(input);
}
list[2].sort((o1,o2)->o2-o1);
list[0].sort((o1,o2)->o1-o2);
int sum=0;
while(list[2].size()>0){
if(list[2].size()>1) {
int peek = list[2].peek();
if (peek > 1) {
int poll = list[2].poll();
if (list[2].peek() > 1) sum += poll * list[2].poll();
else sum += poll + list[2].poll();
} else sum += list[2].poll() + list[2].poll();
}
else sum+=list[2].poll();
}
while (list[0].size() > 0){
if(list[0].size()>1) sum+= list[0].poll() * list[0].poll();
else if(!list[1].isEmpty()) break;
else sum+=list[0].poll();
}
System.out.println(sum);
}
}
|
cs |
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [9576] 책 나눠주기JAVA (0) | 2021.10.28 |
---|---|
[BOJ] 백준 [1202] 보석 도둑JAVA (0) | 2021.10.26 |
[BOJ] 백준 [1715] 카드 정렬하기JAVA (0) | 2021.10.26 |
[BOJ] 백준 [1339] 단어 수학JAVA (0) | 2021.10.25 |
[BOJ] 백준 [1041] 주사위 JAVA (0) | 2021.10.24 |