[ Algorithm ]/Baekjoon
[백준] 4358번 : 생태학
HoYoung Kim
2021. 10. 19. 18:08
조건
시간제한 : 1초
메모리제한 : 256MB
문제
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.
입력
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.
출력
주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.
알고리즘 분류
- 자료구조
- 문자열
- 트리를 사용한 집합과 맵
- 해시를 사용한 집합과 맵
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, Integer> map = new HashMap<>();
ArrayList<String> list = new ArrayList<>();
int total = 0;
while (true) {
String str = br.readLine();
if (str == null || str.equals("")) {
break;
}
map.put(str, map.getOrDefault(str, 0) + 1);
total++;
}
for (String s : map.keySet()) {
list.add(s);
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i) + " " + String.format("%.4f", (double) map.get(list.get(i)) * 100 / total));
}
}
}