본문 바로가기
Algorithm/BOJ

백준 4358번 : 생태학 - hash, Java

by catchJava 2022. 12. 31.

https://www.acmicpc.net/problem/4358

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

 

트라이를 구현해서 해결할 수 있고,

그냥 단순히 hash 자료 구조를 활용하여 문제를 해결할 수 있다.

 

 

 

//package org.example;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        Map<String, Integer> map = new HashMap<>();

        int total = 0;
        String str = "";
        while ((str = br.readLine()) != null) {
            total++;

            //map에 해당 키가 존재하지 않으면, 키를 새로 추가하고 값을 1로 세팅
            if (!map.containsKey(str)) {
                map.put(str, 1);
            } else {
                map.put(str, map.get(str) + 1);
            }
        }
        List<String> keys = new ArrayList<>(map.keySet());
        Collections.sort(keys);

        for (Object key : keys) {
            sb.append(key).append(" ").append(String.format("%.4f", (double) map.get(key) * 100 / total)).append("\n");
        }

        System.out.println(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}