-
[Baekjoon Online Judge] 1744번: 수 묶기문제 풀이/Baekjoon Online Judge 2021. 1. 2. 14:56
[Baekjoon Online Judge] 1744번: 수 묶기
입력 받은 값들을 오름차순으로 정렬하여 가장 높은 수가 나올 수 있도록 수를 배분한다.
1. 0을 포함한 음수
2. 1
3. 1을 제외한 양수
1의 경우에는 곱하는 것 보다 더하는 것이 더 큰 값이 나오기 때문에 따로 더해주었다.
음수 list는 가장 작은 수 부터 탐색하며 짝수 번째에 곱해주고, 만약 size가 홀수로 한 개 남는다면 더해준다.
양수 list는 가장 큰 수 부터 탐색하며 짝수 번째에 곱해주고, size가 홀수로 한 개 남는다면 더해준다.
import java.io.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Baekjoon1744 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(bufferedReader.readLine()); int[] numbers = new int[n]; for (int i = 0; i < n; i++) { int number = Integer.parseInt(bufferedReader.readLine()); numbers[i] = number; } Arrays.sort(numbers); List<Integer> minusList = new ArrayList<>(); // 0을 포함한 음수를 저장할 list List<Integer> plusList = new ArrayList<>(); // 1을 제외한 양수를 저장할 list int result = 0; for (int number : numbers) { if (number <= 0) minusList.add(number); else if (number == 1) result += 1; // 1인 경우 더할 때 가장 값이 커진다. else plusList.add(number); } for (int i = 0; i < minusList.size(); i+=2) { if (i == minusList.size() - 1) result += minusList.get(i); else result += minusList.get(i) * minusList.get(i + 1); } for (int i = plusList.size() - 1; i >= 0; i-=2) { if (i == 0) result += plusList.get(i); else result += plusList.get(i) * plusList.get(i - 1); } bufferedWriter.write(String.valueOf(result)); bufferedWriter.flush(); bufferedReader.close(); bufferedWriter.close(); } }
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 11720번: 숫자의 합 (0) 2021.01.03 [Baekjoon Online Judge] 2438번: 별 찍기 - 1 (0) 2021.01.03 [Baekjoon Online Judge] 1138번: 한 줄로 서기 (0) 2021.01.02 [Baekjoon Online Judge] 1080번: 행렬 (0) 2021.01.01 [Baekjoon Online Judge] 1339번: 단어 수학 - 풀이 추가 예정 (0) 2020.12.27