본문 바로가기
백준/1 - 5000

[백준] 4358번 : 생태학 (JAVA)

by lms0806 2021. 7. 12.
728x90
반응형

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

 

4358번: 생태학

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

www.acmicpc.net

풀이

이 문제는 Map을 이용하여 풀면 됩니다.

while((str = br.readLine()) != null)로 입력받지 않을때까지 입력받습니다.

만약 map에 이미 있다면 해당 map의 value값을 +1 시켜줍니다.

그러면서 차지하는 %를 구해야하므로 전체갯수를 세기 위하여 count를 ++ 시켜줍니다.

 

Map을 처음부터 보면서 value 값에 100을 곱하고 전체 갯수로 나눠줍니다.(% 구하기)

소수점 4째 자리에서 반올림 해줘야 하므로 String.format("%.4f", value)를 사용해 출력을 해줍니다.

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
        
        TreeMap<String, Integer> map = new TreeMap<>();
        
        String str = "";
        int count = 0;
        while((str = br.readLine()) != null) {
            map.put(str, !map.containsKey(str) ? 1 : map.get(str) + 1);
            count++;
        }
        
        Object[] k = map.keySet().toArray();
        Arrays.sort(k);
        
        StringBuilder sb = new StringBuilder();
        for(Object o : k) {
            String key = (String) o;
            double value = (double)(map.get(key)*100)/count;
            sb.append(key).append(" ").append(String.format("%.4f", value)).append("\n");
        }
        System.out.print(sb);
    }
}

 

728x90
반응형

댓글