4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
나무의 각 종의 이름이 입력으로 들어오면 사전순으로 각 종의 비율을 출력하는 문제입니다.
사전순으로 출력하기 위해 Map 중에서 TreeMap을 사용하였습니다.
이름이 주어질 때마다 새로운 이름이면 생성하여 맵에넣고, 기존에 있던 이름이면 +1.0한 값을 맵에 넣어줍니다.
맵의 데이터들을 출력하기 위해 Entry를 사용하였고, e.getKey()(이름)과 e.getValue()/N *100 (비율)을 출력하였습니다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Map.Entry; import java.util.TreeMap; public class Main {     static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));     static String st;     static TreeMap<String, Double> m = new TreeMap<>();     static double N;     static void func() {         StringBuffer sb = new StringBuffer();         for (Entry<String, Double> e : m.entrySet()) {             sb.append(e.getKey() + " " + String.format("%.4f", e.getValue() * 100.0 / N) + "\n");         }         System.out.println(sb.toString());     }     static void input() throws Exception {         while (true) {             st = br.readLine();             if (st == null || st.length() == 0)                 break;             if (m.containsKey(st)) {                 double a = m.get(st);                 m.put(st, a + 1.0);             } else {                 m.put(st, 1.0);             }             N += 1.0;         }     }     public static void main(String[] args) throws Exception {         input();         func();     } } | cs | 
'algorithm > data-structure' 카테고리의 다른 글
| boj 1874 수택 수열 (0) | 2021.01.25 | 
|---|---|
| boj 17298 오큰수 (0) | 2021.01.25 | 
| boj 5639 이진 검색 트리 (0) | 2021.01.24 | 
| boj 1991 트리 순회 (0) | 2021.01.22 | 
| boj 11003 최솟값 찾기 (0) | 2021.01.22 |