[BOJ] 4358. 생태학

2022. 12. 11. 18:13·algorithm

문제

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


입력
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 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
'algorithm' 카테고리의 다른 글
  • [BOJ] 22252. 정보 상인 호석
  • [BOJ] 13915. 현수의 열기구 교실
  • [BOJ] 1965. 상자넣기
  • [BOJ] 1890. 점프
siio
siio
  • siio
    siio's blog
    siio
  • 전체
    오늘
    어제
    • category (47)
      • Projects (4)
      • Java (1)
      • Spring (0)
      • DevOps (0)
      • algorithm (42)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SWYP
    Knapsack
    Cross Domain
    Scanner
    dfs
    JDK
    외판원순회
    git #github #협업프로세스
    DP
    BufferedReader
    jre
    risingcamp
    same site
    10971
    ncp
    jvm
    http only cookie
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
siio
[BOJ] 4358. 생태학
상단으로

티스토리툴바