백준 4358 생태학

·2022년 3월 8일
0

문제

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


코드

import java.io.*;
import java.util.*;

class Main {
    public static class Tree {
        String name;
        int count;

        public Tree(String name) {
            this.name = name;
            this.count = 1;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        HashMap<String, Tree> tree = new HashMap<>();
        String s = "jaehyun";
        int count = 0;
        while (true) {
            s = br.readLine();
            if (s == null)
                break;
            if (s.equals(""))
                break;

            if (tree.containsKey(s))
                tree.get(s).count++;
            else
                tree.put(s, new Tree(s));
            count++;
        }

        Tree[] result = new Tree[tree.size()];
        Iterator<String> iterator = tree.keySet().iterator();

        for (int i = 0; i < tree.size(); i++)
            result[i] = tree.get(iterator.next());

        Arrays.sort(result, new Comparator<Tree>() {
            @Override
            public int compare(Tree o1, Tree o2) {
                return o1.name.compareTo(o2.name);
            }
        });

        for (Tree i : result) {
            bw.write(i.name + " " + String.format("%.4f", (double) i.count / count * 100) + "\n");

            bw.flush();
        }
    }
}

해결 과정

  1. HashMap을 사용해서 입력 받은 Tree 클래스를 저장하면서 카운팅 해준다. 사전 순으로 정렬하기 위해서 Tree형 배열을 선언한 후(배열의 크기는 HashMap의 size) Comparator을 사용해서 Tree.name을 기준으로 사전 순으로 배열을 정렬해준다. 마지막으로 문제의 조건에 맞게 출력해줬다.

  2. 😁

profile
渽晛

0개의 댓글