본문 바로가기
알고리즘 문제/Java

[goormlevel/Java] 밀도 정렬

by 현장 2026. 6. 1.

-Code

import java.io.*;
import java.util.*;

class Main {
	static class Matter {
		double weight, volume;
		int idx;

		public Matter (double weight, double volume, int idx) {
			this.weight = weight;
			this.volume = volume;
			this.idx = idx;
		}
	}
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		// 배열로 받기
		Matter[] matters = new Matter[n];
		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			double w = Double.parseDouble(st.nextToken());
			double v = Double.parseDouble(st.nextToken());
			matters[i] = new Matter(w, v, i + 1);
		}
		// 정렬
		Arrays.sort(matters, (o1, o2) -> {
			double oDen1 = o1.weight / o1.volume;
			double oDen2 = o2.weight / o2.volume;
			// 밀도가 같은 경우
			if (oDen1 == oDen2) {
				// 무게가 같은 경우
				if (o1.weight == o2.weight) {
					// 인덱스의 역순으로 정렬
					return o2.idx - o1.idx;
				}
				// 무게 오름차순 정렬
				return Double.compare(o1.weight, o2.weight);
			}
			// 밀도 오름차순 정렬
			return Double.compare(oDen1, oDen2);
		});
		// 결과 출력
		System.out.println(matters[n - 1].idx);
	}
}

'알고리즘 문제 > Java' 카테고리의 다른 글

[goormlevel/Java] Stack  (0) 2026.06.03
[goormlevel/Java] 연속 점수  (0) 2026.06.02
[goormlevel/Java] Queue  (0) 2026.05.31
[goormlevel/Java] M배 배열  (0) 2026.05.30
[goormlevel/Java] 0 채우기  (0) 2026.05.29