문제
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.
입력
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.
출력
주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.
해결 방법
- While문을 돌려 나무를 treemap에 이름과 수를 넣고 total++ 한다.
- 미국 전역의 나무의 총 개수를 total로 세고 각 나무당 개수를 순서가 보장되는 자료구조 treemap을 사용하면 나무의 이름이 사전순으로 정렬되어 저장된다.
- 나무의 비율을 백분율 double로 하여 String.format을 이용해 구한다.
코드
// 생태학
public class Week09_4358 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Map<String, Integer> map = new TreeMap<>(); // 순서 보장 Map
int total = 0;
String input;
while (true) {
input = br.readLine();
if (input == null) {
break;
}
total++;
if (map.containsKey(input)) {
map.put(input, map.get(input) + 1); // 중복이 있으면 +1
} else {
map.put(input, 1);
}
}
for (String s : map.keySet()) {
double value = (double) (map.get(s) * 100.0) / total;
bw.write(s + " " + String.format("%.4f", value) + "\n"); // Math.round로 하면 틀림
}
bw.flush();
bw.close();
}
}
'algorithm' 카테고리의 다른 글
| [BOJ] 22252. 정보 상인 호석 (0) | 2022.12.11 |
|---|---|
| [BOJ] 13915. 현수의 열기구 교실 (0) | 2022.12.11 |
| [BOJ] 1965. 상자넣기 (0) | 2022.12.11 |
| [BOJ] 1890. 점프 (0) | 2022.12.11 |
| [BOJ] 1003. 피보나치 함수 (1) | 2022.12.11 |