-
[백준/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