[알고리즘] 백준 4358 - 생태학

홍예주·2022년 1월 2일
0

알고리즘

목록 보기
15/92

1. 문제

https://www.acmicpc.net/problem/4358
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.

2. 입력

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

3. 풀이

맵을 사용해서 풀면 된다.
맵에 나무들을 넣어주며, 동일한 key(나무 이름)이면 value를 1씩 증가시킨다.
사전순으로 정렬하기 위해 Collections.sort를 사용했다
-> key값을 사전순으로 정렬해 맵에서 value 찾을 때 사용

4. 코드

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

//20220102
public class hardWood {
    public static void solution() throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

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

        float count = 0f;

        String str = "";

        while((str= bf.readLine())!=null){
            map.put(str, map.getOrDefault(str,0f)+1f);
            count++;
        }


        List<String> keys = new ArrayList<>(map.keySet());
        Collections.sort(keys);

        for(String key : keys){
            System.out.print(key+" ");
            System.out.println(String.format("%.4f",map.get(key)/count*100));
        }
    }
}
profile
기록용.

0개의 댓글