자바/코드트리

[코드트리] 3개씩 묶기 - 자바(Java)

Jakorithm 2024. 6. 10. 01:40
728x90

문제

https://www.codetree.ai/problems/bundle-by-3?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

n개의 정수가 주어집니다. 이 정수들은 1개 ~ 3개 단위로 묶어서 제거해 가며 모든 정수를 제거하려 합니다. 제거할 때마다 제거되는 수들의 합을 더해주는데, 이때 3개로 묶어서 제거하는 경우에는 그중 가장 작은 값 하나는 더하지 않아도 된다고 합니다.

모든 정수를 제거했을 때 제거되는 수들의 합이 최소가 되게 구하는 프로그램을 작성하세요.

 

입력 예시

6
6 4 5 5 5 5

 

출력 예시

21

 

 

코드

첫 번째 줄에 정수의 개수 n이 주어집니다.

두 번째 줄에 n개의 정수가 공백을 두고 주어집니다.

  • 1 ≤ n ≤ 100,000
  • 1 ≤ 주어진 정수의 값 ≤ 1000
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());

        int[] nums = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            nums[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(nums); // 오름차순 정렬

        int count = 0;
        int result = 0;
        // 큰 수부터 순회
        for (int i = n - 1; i >= 0; i--) {
            count++;
            // 큰 수부터 3개씩 묶어서 처리하여 작은 수 무시
            if (count % 3 == 0) {
                continue;
            }
            // 제거되는 수들의 합
            result += nums[i];
        }

        bw.write(String.valueOf(result));
        bw.flush();
        bw.close();
    }
}

 

728x90