문제에서 나온 배열 P를 정렬하고 누적해서 더해주면 최소값이 나온다.
DP문제인가 싶었는데 딱히 DP라 할 것도 없이 그냥 바로 더해주면 될 것 같아서 더했다.
입력이 P = [3, 1, 4, 3, 2]
인 경우, 정렬해서 P = [1, 2, 3, 3, 4]
로 저장
각 사람들이 걸린 시간 = 누적해서 걸린 시간
각 사람들이 걸린 시간 = [1, 3, 6, 9, 13]
이고, 총 합을 구해주면 된다.
결국 1 + 3 + 6 + 9 + 13
인데,
이는 1 + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 3) + (1 + 2 + 3 + 3 + 4)
와 같다.
P1은 5번, P2는 4번, P3는 3번, P4는 2번, P5는 1번 더해진다.
➡️ 이걸 이용해서 dp로 풀지 않고 for문으로 바로 계산!
결과값이 잘 나오는 걸 확인하고 제출했는데 컴파일 에러가 났다.
인텔리제이에서 잘 돌아가는데 컴파일 에러가 난다고??? 그대로 복붙했는데???
이건 찾아봐야 할 것 같아서 찾아봤더니 바로 나왔다.
❗️클래스명을 반드시 Main
으로 해야한다는 것!
백준 왜 이런거 말 안해줘? 🥺 너무해 ㅠ...... 나만 몰랐지 또? 🥹...
백준 자바로 처음 푼 사람의 비애,,,
그래도 문제는 금방 풀어서 좋다 실버4짜리지만 ㅋㅎ,,
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = Integer.parseInt(sc.nextLine());
int[] time = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Arrays.sort(time);
int result = 0;
for (int i = 0; i < num; i++) {
result += time[i] * (num - i);
}
System.out.println(result);
}
}