자바 / 실1 / 그리디 알고리즘
https://www.acmicpc.net/problem/15903
알고리즘을 생각해 내는 것도 쉬웠고, 알고리즘을 생각해 낸 다음에는 푸는 데 20분도 걸리지 않았다.
다만, 최대 입력을 받는 경우 그 합이 int의 범위를 넘어가 오버플로우가 날 수 있는 경우를 고려하지 않아 sum과 arr의 자료형을 long으로 바꾸어 다시 풀어서 맞았다.
알고리즘: 매 순간 가장 작은 수 두 개를 더하는 방식으로 진행하면 쉽게 풀 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
public class Main
{
private static int n, m;
private static long sum = 0;
private static long[] arr;
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
StringTokenizer st = new StringTokenizer(s);
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
arr = new long[n];
s = br.readLine();
st = new StringTokenizer(s);
for(int i = 0; i < n; i++)
{
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
for(int i = 0; i < m; i++)
{
arr[0] = arr[0] + arr[1];
arr[1] = arr[0];
Arrays.sort(arr);
}
for(int i = 0; i < n; i++)
{
sum += arr[i];
}
System.out.println(sum);
}
}'알고리즘' 카테고리의 다른 글
| [자바] 1715 카드 정렬하기 (2) | 2024.07.23 |
|---|---|
| [자바] 1339 단어 수학 (0) | 2024.07.21 |
| 11501 주식 (4) | 2024.07.19 |
| 1105 팔 (0) | 2024.07.17 |
| 1931 회의실 배정 (0) | 2024.07.07 |