베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 2036번: 수열의 점수

2022. 12. 11. 22:20

태그: Java

2036번: 수열의 점수

 

2036번: 수열의 점수

n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두

www.acmicpc.net

키워드

한 정수를 제거하는 경우에는 그 정수가 점수가 되고

두 정수를 제거하는 경우에는 두 정수의 곱이 점수가 된다.

이를 반복하여 수열에 아무 수도 남지 않게 되었을 때, 점수의 총 합의 최대


구현

양이아닌 정수의 경우 작은 것 끼리 최대한 곱하는 것이 이득이다.

양의 정수의 경우 큰 것 끼리 최대한 곱하는 것이 이득이다.

단, 1의 경우 더하는 것이 이득이다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class java_2036 {
    static int n;

    static List<Integer> negativeNumberList;
    static List<Integer> positiveNumberList;

    static long solution() {
        long result = 0;

        // 정렬
        Collections.sort(negativeNumberList);

        // -는 -끼리 모아야 이득임
        // -만 우선적으로 처리하자
        for (int i = 0; i < negativeNumberList.size(); i++) {
            int now = negativeNumberList.get(i);

            // 마지막 값이라면 -> 그냥 더한다.
            if (i == negativeNumberList.size() - 1) {
                result += now;
                continue;
            }

            // 다음 값 미리 추출
            int next = negativeNumberList.get(i + 1);
            // 곱할 것인가 더할 것인가?

            // 1. 현재가 음수이고 다음이 양수가 아니라면 -> 곱한다.
            result += ((long)now) * next;
            i++;

            continue;

        }

        Collections.sort(positiveNumberList, (a, b) -> b - a);

        for (int i = 0; i < positiveNumberList.size(); i++) {
            int now = positiveNumberList.get(i);

            // 마지막 값이라면...
            if (i == positiveNumberList.size() - 1) {
                result += now;
                continue;
            }

            // 다음 값 미리 추출
            int next = positiveNumberList.get(i + 1);

            if (next == 1) {
                result += now;
                continue;
            }

            // 곱할 것인가 더할 것인가?
            result += ((long)now) * next;
            i++;
            continue;

        }

        return result;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        n = Integer.parseInt(br.readLine());

        negativeNumberList = new ArrayList<>();
        positiveNumberList = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            int number = Integer.parseInt(br.readLine());
            if (0 < number) {
                positiveNumberList.add(number);
                continue;
            }

            negativeNumberList.add(number);
        }

        long result = solution();

        System.out.println(result);

        br.close();
    }
}

저작자표시 (새창열림)

'Coding Test > BOJ' 카테고리의 다른 글

[BOJ/JAVA] 1459번: 걷기  (0) 2022.12.11
[BOJ/JAVA] 21758번: 꿀 따기  (0) 2022.12.11
[BOJ/JAVA] 1783번: 병든 나이트  (0) 2022.12.11
[BOJ/JAVA] 14613번: 너의 티어는?  (0) 2022.12.05
[BOJ/JAVA] 1005번: ACM Craft  (1) 2022.12.05
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 1459번: 걷기
    • [BOJ/JAVA] 21758번: 꿀 따기
    • [BOJ/JAVA] 1783번: 병든 나이트
    • [BOJ/JAVA] 14613번: 너의 티어는?
    베오
    베오

    티스토리툴바