728x90
❓ 열심히 일하는 중
🏷️ 관련 주제 : Priority Queue

💦 나의 시도
우선순위 큐를 이용한 풀이
BufferedReader와StringTokenizer로
일의 개수 intN,
일을 처리한 후 감소하는 일의 중요도 intM,
일의 완료 기준 intK
를 입력 받아 int형 변환 후 할당- PriorityQueue
task를 내림차순 정렬로 선언 : 작업의 우선순위를 담을 우선순위 큐 - 0 ~ (N - 1)의 범위를 반복문을 돌면서 작업의 중요도를
task에 담기 - 송이가 모든 일을 끝낼 때까지 걸린 일 수 int
day를 0으로 초기화 - 전날의 만족감 int
Y를 0으로 초기화 task가 비어있지 않은 동안 반복문을 돌며 일 처리day1증가- 가장 중요한 일
task에서 꺼내서(task.poll()) intP에 할당 - 오늘의 만족감 구해서(
Y / 2 + P)Y에 할당 StringBuffer에 (오늘의 만족감) + 줄바꿈("\n") 추가- 오늘 처리한 작업의 중요도 감소시키기(
P -= M) - 만약 처리된 작업의 중요도가
K초과이면 아직 작업이 완료되지 않은 것이므로task에 다시 추가(task.add(P))
day출력- StringBuffer
sb출력
📑제출 기록 및 오답 원인

💯 해결 방법
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
PriorityQueue<Integer> task = new PriorityQueue<>(Comparator.reverseOrder());
for (int i = 0; i < N; i++) {
task.add(Integer.parseInt(br.readLine()));
}
StringBuffer sb = new StringBuffer();
int day = 0;
int Y = 0;
while (!task.isEmpty()) {
day++;
int P = task.poll();
Y = Y / 2 + P;
sb.append(Y+"\n");
P -= M;
if (P > K) {
task.add(P);
}
}
System.out.println(day);
System.out.println(sb);
}
}
728x90