본문 바로가기
Problem Solving/Baekjoon

[백준] 9733 꿀벌 - Data Structure / Java

by graycode 2023. 4. 28.

 문제 링크

 

9733번: 꿀벌

각각의 일을 한 횟수와 비율을 공백으로 구분하여 출력한다. 출력은 {Re,Pt,Cc,Ea,Tb,Cm,Ex} 순서대로 하며, 비율은 소수점 둘째 자리까지 출력한다. 주어진 목록에 없는 일은 출력하지 않는다. 입력의

www.acmicpc.net

 

 풀이 과정

Map.getOrDefault() 를 활용하여 각 일의 빈도 수를 저장하고, 일의 총 개수을 저장한다.

출력되어야 할 일의 순서를 배열에 구성하고 각각의 값의 비율을 구해 출력한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {

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

        Map<String, Integer> map = new HashMap<>();
        int cnt = 0;

        String input;
        while ((input = br.readLine()) != null) {
            st = new StringTokenizer(input);
            while (st.hasMoreTokens()) {
                String key = st.nextToken();
                map.put(key, map.getOrDefault(key, 0) + 1);
                cnt++;
            }
        }

        StringBuilder sb = new StringBuilder();
        DecimalFormat df = new DecimalFormat(" 0.00");

        for (String key : new String[]{"Re", "Pt", "Cc", "Ea", "Tb", "Cm", "Ex"}) {
            int ratio = map.getOrDefault(key, 0);
            sb.append(key).append(" ").append(ratio).append(df.format(ratio / (double) cnt)).append("\n");
        }

        bw.write(sb.append("Total ").append(cnt).append(" 1.00").toString());
        bw.flush();
    }

}

댓글