Step-by-Step
[Java] 백준 14908 - 구두 수선공 본문
https://www.acmicpc.net/problem/14908
14908번: 구두 수선공
최소 보상금을 지불하는 작업 순서를 출력해야 한다. 모든 작업은 입력에서의 번호(1~N)로 표시해야 한다. 모든 정수는 한 줄로 표시해야 하며, 각 작업은 공백 문자로 구분한다. 여러 가지 해답
www.acmicpc.net
정렬 조건
1. 일의 능률이 높은 순 (T/S)
2. i가 빠른 순
compare의 리턴값은 int 이기 때문에 if로 비교해서 1 or -1을 리턴하도록 하였다
PQ로 로직을 만들어 데이터를 넣고, 차근차근 빼서 출력해주면 됨
[코드]
package BOJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
public class boj14908 {
static class Process{
int idx;
double rate;
public Process(int idx, double rate) {
this.idx = idx;
this.rate = rate;
}
}
private static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(br.readLine());
PriorityQueue<Process> pq = new PriorityQueue<Process>(new Comparator<Process>() {
@Override
public int compare(Process o1, Process o2) {
if(o1.rate==o2.rate)
return o1.idx - o2.idx;
if(o1.rate> o2.rate)
return 1;
return -1;
}
});
for(int i=1; i<=N; i++) {
String[] str = br.readLine().split(" ");
double T = Double.parseDouble(str[0]);
double S = Double.parseDouble(str[1]);
double rate = T/S;
pq.add(new Process(i,rate));
}
while(!pq.isEmpty())
sb.append(pq.poll().idx+" ");
System.out.println(sb.toString().trim());
}
}
'언어 > JAVA' 카테고리의 다른 글
[Java] Daily LeetCode Challenge 2306. Naming a Company (0) | 2023.02.09 |
---|---|
[Java] Daily LeetCode Challenge 904. Fruit Into Baskets (0) | 2023.02.07 |
[Java] 백준 1781 - 컵라면 (0) | 2023.01.26 |
[Java] 백준 3661 - 생일 선물 (0) | 2023.01.26 |
[Java] 백준 23255 - 구름다리2 (0) | 2023.01.19 |
Comments