[백준] 생태학(자바)

지수·2021년 8월 15일
0
post-thumbnail

알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!

📄 문제

[백준] 생태학


👩‍💻 풀이

1. 문제 이해

이 문제는 입력된 수종을 사전순으로 정렬하고, 전체 입력 중에서 각 수종이 차지하는 비중(중복값)을 소수점 넷째자리까지 출력하는 문제이다.

2. TreeMap 활용 풀이

  • 출력시 중복 없이 사전식으로 정렬 + 수종과 각 비율 매핑 => 정렬되는 맵 TreeMap !
  • 전체 입력 수종 개수를 파악할 int tatalNum 정의, 하나씩 입력될 때마다 ++
  • 입력받는 값이 null이 아닐 때까지 treeMap에 put하는 과정 반복
  • iterator를 통해 treeMap을 돌면서 key와 value를 찾고, totalNum과 value 값을 통해 전체 중 해당 수목의 비율 계산
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
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> treeMap = new TreeMap<>();
        int totalNum = 0;
        String tree = br.readLine();
        while (tree != null) {
            treeMap.put(tree, treeMap.getOrDefault(tree, 0) + 1);
            totalNum++;
            tree = br.readLine();
        }

        Iterator<String> keyAll = treeMap.keySet().iterator();
        String key = null;
        while(keyAll.hasNext()) {
            key = keyAll.next();
            double per = (double)(treeMap.get(key)*100)/totalNum;
            System.out.println(key + " " + String.format("%.4f", per));
        }
    }
}
profile
사부작 사부작

0개의 댓글