CS/알고리즘
백준 1744번 : 수 묶기[java]
leejiwoo21
2023. 2. 11. 12:04
1. 1보다 큰 양수는 큰 수 부터 2개씩 짝을 지어 곱한다.
→ 곱하지 못하고 남은 양수는 더한다.
2. 1은 그대로 더하는데 사용한다.
3. 음수는 작은 수 부터 2개씩 짝을 지어 곱해서 양수로 만든다.
→ 곱하지 못하고 남은 음수는 0과 곱해서 0으로 만들거나 0이 없으면 그대로 더한다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> posNum = new ArrayList<>(); // 양수 저장
ArrayList<Integer> negNum = new ArrayList<>(); // 음수 저장
int ones = 0; // 1의 수
int zeros = 0; // 0의 수
int posIdx = 0;
int negIdx = 0;
int sum = 0;
for(int i=0; i<N; i++) {
int n = Integer.parseInt(br.readLine());
if(n<0) {
negNum.add(n);
}
else if(n == 0) {
zeros++;
}
else if(n == 1) {
ones++;
}
else {
posNum.add(n);
}
}
//양수 계산
Collections.sort(posNum, Comparator.reverseOrder());
while(posIdx+1 <= posNum.size()-1) {
int n1 = posNum.get(posIdx);
int n2 = posNum.get(posIdx+1);
sum += n1*n2;
posIdx += 2;
}
if(posIdx == posNum.size()-1) {
sum += posNum.get(posIdx);
}
//음수 계산
Collections.sort(negNum);
while(negIdx+1 <= negNum.size()-1) {
int n1 = negNum.get(negIdx);
int n2 = negNum.get(negIdx+1);
sum += n1*n2;
negIdx += 2;
}
if(zeros == 0) {
if(negIdx == negNum.size()-1) {
sum += negNum.get(negIdx);
}
}
//1 계산
sum += ones;
System.out.print(sum);
}
}
반응형