https://www.acmicpc.net/problem/1715
간단한문제
정렬후에 앞에서부ㅌ ㅓ합치고 넣어주면 끝
그리고 정렬을 다시해줘야되는데 그냥 최대힙을 이용하면된다..
그,리고 주의할점
덱이 1개인경우 (N=1)에는 비교할필요가없으므로 0으로해주기
오히려 겁먹고 어렵게생각하면 안풀리는 문제이다..
필자의 경우
이전카드 // 그리고 여태까지합친값 // 그리고 앞으로의 합칠값
이렇게 비교하고 더하고 어렵게짯엇는데.. 생각을 달리하니 금방풀리는문제..
아무튼 아이디어를 바탕으로 구현한 코드는 다음과 같다.
import java.io.*;
import java.util.*;
public class 카드정렬하기 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PriorityQueue<Integer> pq = new PriorityQueue<>();
int tc = Integer.parseInt(br.readLine());
int k[] = new int[tc];
for(int i=0;i<tc;i++) {
pq.add(Integer.parseInt(br.readLine()));
}
int firstnum = pq.poll();
if(pq.isEmpty()) {
System.out.println(firstnum);
}
else {
int sum = firstnum;
while(!pq.isEmpty()) {
int cur = pq.poll(); // 현재카드값
sum += cur;
if(firstnum==0) {
firstnum = cur;
continue;
}
if(pq.isEmpty()) {
break;
}
pq.add(cur+firstnum);
firstnum=0;
}
System.out.println(sum);
}
}
}
얼른 다음으로 ㄱㄱ