문제 풀이/백준

[백준] 4358번. 생태학(JAVA)

27200 2025. 2. 6. 14:06

문제

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


풀이(15분)

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        double n = 0;

        TreeMap<String, Integer> map = new TreeMap<>();

        while ((line = br.readLine()) != null && !line.isEmpty()) { // 빈 줄도 종료 조건에 포함
            n++;
            map.put(line, map.getOrDefault(line, 0) + 1);
        }

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            double percentage = (entry.getValue() / n) * 100;
            System.out.println(entry.getKey() + " " + String.format("%.4f", percentage));
        }
    }
}

 

map을 사용해도 시간 내에 해결할 수 있을까? + 메모리는 괜찮을까?라는 고민을 제외하면 어려운 문제는 아니었다.

다만 IDE의 자동완성 기능을 꺼두었기에 메서드가 생각보다 떠오르지않아 구글링을 몇 번 했다.

 

1. line = br.readLine() != null 입력이 끝이 없이 들어오는 것이기 때문에 다음 구문을 통해 해결해주어야 한다.

->! line.isEmpty()가 있어야 ide에서도 엔터 두 번을 통해 답을 확인할 수 있다.

 

2. for-each 구문

-> 매번 쓰는 것이지만 생각보다 손에 잘 붙지 않는다. 연습을 더더욱 많이 하자!!

 

3. String.format

-> 이번에는 구글링 없이 해결했지만 확실한 것은 없으니 꾸준히 숙지하자.