Algorithm, Problem Solving/백준(boj)

[백준][java] 9733 - 꿀벌

태오님 2023. 3. 21.

https://www.acmicpc.net/problem/9733 

 

9733번: 꿀벌

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

www.acmicpc.net

 

난이도 : S5

구현 : 문자열, 해쉬맵


문제 풀이

  • HashMap 자료구조 사용
  • 단순 구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

/*author : DDing77*/

public class Main {

    private final String[] works = {"Re", "Pt", "Cc", "Ea", "Tb", "Cm", "Ex"};
    private HashMap<String, Integer> worksMap;

    public void makeWorks() {
        worksMap = new HashMap<>();

        for (int i = 0; i < 7; i++) {
            worksMap.put(works[i], 0);
        }
    }

    public String getResult(double total) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < 7; i++) {
            sb.append(String.format("%s %d %.2f", works[i], worksMap.get(works[i]), worksMap.get(works[i]) / total)).append('\n');
        }
        sb.append("Total ").append((int) total).append(" 1.00").append('\n');

        return sb.toString();
    }

    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        makeWorks();
        double total = 0;

        String input = "";
        while ((input = br.readLine()) != null) {
            st = new StringTokenizer(input);
            while (st.hasMoreTokens()) {
                total++;
                String cur = st.nextToken();
                if (worksMap.containsKey(cur)) {
                    worksMap.put(cur, worksMap.get(cur) + 1);
                }
            }
        }

        System.out.print(getResult(total));
    }

    public static void main(String[] args) throws IOException {
        new Main().solution();
    }
}

댓글