Algorithm/Java

[백준/JAVA] 1758번: 알바생 강호

dbfl9911 2024. 7. 16. 16:25
반응형

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

 

- 정답 코드

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());

        long maxTip = 0;

        // 각 손님의 순서 계산해 팁 최대화
        for(int i = 0; i < N; i++) {
            // i번째 손님 팁 계산
            // 손님이 주려고 했던 팁 - (받은 순서 - 1)
            int tip = list[i] - i;

            // 계산된 팁이 음수가 아니면 최대 팁에 추가 
            if(tip > 0) {
                maxTip += tip;
            }
        }
        System.out.println(maxTip);
    }
}

- 코드 설명

 

1. 각 손님의 팁을 계산

int tip = list[i] - i;

 

  • list[i]는 현재 손님이 주려고 했던 원래의 팁입니다.
  • i는 현재 손님의 순서(0부터 시작)입니다.
  • 실제로 강호가 받을 수 있는 팁은 list[i] - i로 계산됩니다. 이는 손님이 주려고 했던 팁에서 손님의 순서에 따른 팁 감소를 적용한 값입니다.

2. 팁이 음수가 아닌 경우 최대 팁에 추가

if(tip > 0) {
    maxTip += tip;
}

tip이 0보다 큰 경우에만 maxTip에 더합니다. 팁이 음수인 경우에는 강호가 팁을 받지 않기 때문에 무시합니다.

반응형