https://www.acmicpc.net/problem/4358
실버 2
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.
주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Map<String, Integer> treeMap = new TreeMap<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
int total = 0;
while ((line = br.readLine()) != null && !line.isEmpty()) {
treeMap.put(line, treeMap.getOrDefault(line, 0) + 1);
total++;
}
StringBuilder sb = new StringBuilder();
for (String tree : treeMap.keySet()) {
int count = treeMap.get(tree);
double percentage = (double) count / total * 100;
sb.append(String.format("%s %.4f\n", tree, percentage));
}
System.out.print(sb);
}
}

| Map 종류 | 정렬 여부 | 설명 |
|---|---|---|
HashMap | ❌ X (무순서) | key 순서 보장 없음. 가장 빠름 |
LinkedHashMap | ✅ 입력 순서 유지 | key 삽입 순서를 유지 |
TreeMap | ✅ 사전순 정렬 | key를 기준으로 자동 정렬됨 (기본: 오름차순) |