[백준] 수 묶기 1744번 - Java
나의 풀이
public class TieANumber {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
List<Integer> gtZero = new ArrayList<>();
List<Integer> ltZero = new ArrayList<>();
for(int i = 0; i < N; i++) {
int item = Integer.parseInt(br.readLine());
if(item > 0) {
gtZero.add(item);
} else {
ltZero.add(item);
}
}
Collections.sort(ltZero);
Collections.sort(gtZero, Collections.reverseOrder());
int answer = 0;
int idx = ltZero.size();
if(ltZero.size() % 2 != 0) {
answer += ltZero.get(idx - 1);
idx -= 1;
}
for(int i = 0; i < idx; i += 2) {
answer += (ltZero.get(i) * ltZero.get(i + 1));
}
idx = gtZero.size();
if(gtZero.size() % 2 != 0) {
answer += gtZero.get(idx - 1);
idx -= 1;
}
for(int i = 0; i < idx; i += 2) {
if(gtZero.get(i) > 1 && gtZero.get(i + 1) > 1) {
answer += (gtZero.get(i) * gtZero.get(i + 1));
} else if(gtZero.get(i) >= 1 || gtZero.get(i + 1) >= 1) {
answer += (gtZero.get(i) + gtZero.get(i + 1));
}
}
System.out.println(answer);
}
}
- 입력되는 수를 0보다 큰 수, 0과 같거나 작은 수 그룹으로 나눠서 접근하였다.
- 리스트를 두 개 만들어서 각 각 0보다 큰 수, 0과 같거나 작은 수를 구분하여 담아준다.
- 우선 계산을 쉽게 하기 위해서 0보다 큰 수의 리스트는 내림차순 정렬을 하였고, 0과 같거나 작은 수 리스트는 오름차순 정렬을 하였다.
- 먼저 0과 같거나 작은 수 그룹을 계산하였다. 만약 사이즈가 홀수라면 2개씩 짝을 지었을 때 1개가 남기 때문에 마지막 남는 한개는 미리 answer에 더해 주고, 인덱스를 사이즈 - 1로 잡고 반복을 진행하였다.
- 0과 같거나 작은 수의 그룹은 어떻게 하든지 곱하는 것이 제일 큰 수를 만들 수 있는 방법이다.
ex) (-2 + -1) -> -3 but (-2 * -1) -> 2, (-1 + 0) -> -1 but (-1 * 0) -> 0
그렇기 때문에 인덱스를 2씩 증가시키며 그룹을 만들어 곱한 수를 answer에 더해주었다. - 0보다 큰 수도 마찬가지로 사이즈가 홀수라면 1개가 남기 때문에 인덱스 작업을 해주고, 내림차순으로 정렬을 미리 했기 때문에 0부터 반복을 한다.
- 0보다 큰 수같은 경우는 둘 중 하나라도 1이 들어간다면, 곱하는 것보다는 더하는 것이 더 큰 값을 만들 수 있는 방법이다.
ex) (1 * 2) -> 2 but (1 + 2) -> 3
그렇기 때문에 둘 다 1보다 큰 경우에만 곱해서 answer에 더해주고, 둘 중 하나라도 1보다 크거나 같다면 두 수를 더해서 answer 에 더해준다. - 모든 작업을 끝내고 answer를 출력해준다.
Author And Source
이 문제에 관하여([백준] 수 묶기 1744번 - Java), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@goshk95/백준-수-묶기-1744번-Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)