[백준 11508] 2+1세일(Java)

kjihye0340·2021년 4월 28일
0

baekjoon

목록 보기
3/16

문제
https://www.acmicpc.net/problem/11508

풀이
이 문제는 최소 비용을 구하는 문제이다.
한 번에 3개씩 살 수 있고 이 3개 중에 하나를 뺄 수 있을 때,
최소 비용을 구하기 위해서는 뺄 수 있는 값 중에 가장 큰 값을 빼는 것이 유리하다.

즉, 유제품들의 가격을 내림차순으로 정렬한 뒤 3개 씩 묶어서 가장 작은 값을 빼주면 된다.

ex : (7, 6, 5) (4, 3, 2) 1

그러면 내림차순으로 정렬한 상태에서 3번째, 6번째, ... 와 같이 3의 배수인 순서의 값만 빼주면 된다.

코드

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        Integer[] goods = new Integer[N];

        for(int i=0;i<N;i++) goods[i] = scan.nextInt();
        Arrays.sort(goods, Comparator.reverseOrder());

        int sum = 0;
        for(int i=0;i<N;i++){
            if(i%3==2) continue;
            sum += goods[i];
        }
        System.out.println(sum);
    }
}

0개의 댓글