Algorithm/Java

[백준/JAVA] 11508번: 2+1 세일

dbfl9911 2024. 7. 16. 17:41

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

 

- 정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;

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

        int N = Integer.parseInt(br.readLine());
        Integer[] list = new Integer[N];

        for(int i = 0; i < N; i++) {
            list[i] = Integer.parseInt(br.readLine());
        }

        // 내림차순 정렬
        Arrays.sort(list, Collections.reverseOrder());

        int won = 0;

        for(int i = 0; i < N; i++) {
            // 3개씩 묶어서 가장 싼 것을 무료로 
            // 3번째마다 무료 처리
            if((i + 1) % 3 != 0) {
                won += list[i];
            }
        }

        System.out.println(won);
    }
}

- 코드 설명

 

int won = 0;

for (int i = 0; i < N; i++) {
    // 3개씩 묶어서 가장 싼 것을 무료로 
    // 3번째마다 무료 처리
    if ((i + 1) % 3 != 0) {
        won += list[i];
    }
}

 

  • int won = 0;는 총 비용을 저장할 변수를 초기화합니다.
  • for (int i = 0; i < N; i++) 루프는 0부터 N-1까지 반복하여 모든 유제품의 가격을 순회합니다.
  • (i + 1) % 3 != 0 조건은 인덱스 i가 3번째마다 무료로 처리하기 위해 사용됩니다. (i + 1)로 하는 이유는 배열의 인덱스는 0부터 시작하지만, 우리는 1번째, 2번째, 3번째와 같이 1부터 시작하는 순서를 원하기 때문입니다.
    • (i + 1) % 3 == 0일 때, 즉 3번째마다 무료로 처리합니다.
  • won += list[i];는 해당 가격을 총 비용에 더합니다. 하지만 3번째 항목은 무료이기 때문에 추가되지 않습니다.

 

 

ex)

  • 입력: 6, 4, 5, 5, 5, 5
  • 내림차순 정렬: 6, 5, 5, 5, 5, 4
  • 반복문 실행:
    • i=0: 6 (6 추가)
    • i=1: 5 (5 추가)
    • i=2: 5 (무료)
    • i=3: 5 (5 추가)
    • i=4: 5 (5 추가)
    • i=5: 4 (무료)
  • 총 비용: 6 + 5 + 5 + 5 = 21