ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준/JAVA] 1758번: 알바생 강호
    Algorithm 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에 더합니다. 팁이 음수인 경우에는 강호가 팁을 받지 않기 때문에 무시합니다.

    'Algorithm' 카테고리의 다른 글

    [백준/JAVA] 11399번: ATM  (0) 2024.07.17
    [백준/JAVA] 11508번: 2+1 세일  (0) 2024.07.16
    [백준/JAVA] 2217번: 로프  (0) 2024.07.16
    [백준/JAVA] 1343번: 폴리오미노  (0) 2024.07.16
    [백준/JAVA] 14916번: 거스름돈  (1) 2024.07.16
Designed by Tistory.