[Java] 백준 4358 생태학

hyunnzl·2025년 7월 17일

백준

목록 보기
114/116
post-thumbnail

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 종류별 정렬 방식

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

0개의 댓글