백준 | [Silver II] | 생태학 - 4358

bin·2025년 7월 6일
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Map;
import java.util.TreeMap;

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));

        Integer totCnt = 0;
        Map<String, Integer> treeMap = new TreeMap<>();

        StringBuilder sb = new StringBuilder(); 

        String line;
        while ((line = br.readLine()) != null) {
            totCnt++;
            treeMap.put(line, treeMap.getOrDefault(line, 0) + 1);
        }

        for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
            double rt = (double) entry.getValue() / (double) totCnt * 100;
            sb.append(entry.getKey() + " " + String.format("%.4f", rt)).append("\n");
        }

        bw.write(sb.toString());

        bw.flush();
        bw.close();
        br.close();

    }
}

Keypoint

1. TreeMap

2. getOrDefault(Object key, V DefaultValue)

DefaultValue : key에 매핑된 value가 없으면 반환하는 기본값

3. treeMap.entrySet()

entrySet()은 Map의 모든 key-value 쌍을 Set 형태로 반환

이 구문이 좋은 이유

이유설명
가독성key, value를 한 줄에 다룰 수 있음
성능Map.get(key)처럼 다시 검색하지 않아도 됨
정렬 유지TreeMap을 쓰면 자동으로 알파벳 순으로 정렬됨

4. StringBuilder

5. Scanner VS BufferedReader

항목ScannerBufferedReader
패키지java.utiljava.io
사용 용도파싱(정수, 단어 등)까지 포함된 간단한 입력 처리빠른 문자열 입력 처리에 적합
성능상대적으로 느림 (내부에서 파싱 처리 등)빠름 (버퍼 기반으로 입력 처리)
주로 사용하는 메서드nextLine(), nextInt()readLine()
내부 구현파싱 기능 포함 (공백 기준 자동 분리)문자열만 입력받고 파싱은 직접 처리
유연성간편하지만 느리고 덜 유연함빠르지만 파싱 직접 처리해야 해서 복잡할 수 있음

상황별 추천

상황추천
간단한 콘솔 입력 처리Scanner 사용이 편함
대량 입력 / 빠른 처리 필요 (ex: 알고리즘 문제)BufferedReader 추천
파일로부터 빠른 텍스트 입력BufferedReader 더 적합

6. System.out.println VS BufferedWriter

항목System.out.printlnBufferedWriter
주 용도간단한 콘솔 출력버퍼를 사용한 빠른 출력 (파일 또는 콘솔)
성능느림 (출력마다 바로 출력됨 - flush 자동)빠름 (버퍼에 모았다가 한 번에 출력)

상황별 추천

상황추천
단순 디버깅, 콘솔 출력System.out.println
속도 중요한 알고리즘 문제, 반복 많은 출력BufferedWriter + flush()

0개의 댓글