솜이의 데브로그

백준 4358번 ) 생태학 (java) 본문

Algorithm/백준

백준 4358번 ) 생태학 (java)

somsoming 2021. 10. 8. 21:09

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

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

 

문제

 

풀이

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

public class Q4358 {

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

        //TreeMap을 사용하면 바로 정렬
        HashMap<String, Integer> map = new HashMap<>(); 
        
        String word=br.readLine();
        double total=0;

        while(word!=null && word.length()!=0){
            map.put(word, map.getOrDefault(word, 0)+1);
            total++;
            word = br.readLine();
        } 

        Object[] keyArr = map.keySet().toArray();
        Arrays.sort(keyArr);

        for(int i=0; i<keyArr.length; i++){
            int value = map.get(keyArr[i]);
            double percent = (double)value / total * 100;
            bw.write(keyArr[i]+ " "+ String.format("%.4f", percent)+"\n");
        }

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

	}
}

 

 

새로 배운 것

 

HashMap 사용법

HashMap 에서 keyset만 추출해서 배열로 만드는법

Object[] keyArr = map.keySet().toArray();

 

그리고 이 Object 배열에서 가져올 때는 형변환 주의하기.

for(String x: keyArr) {...}  이런식으로 썼다가 형태 안맞아서 계속 오류났다.

 

 

그리고 BufferedReader 에서 EOL 문제. input의 개수 N이 주어지지 않았을 경우 br.readLine() == null 로만 확인했더니 입력값을 계속 받아서 에러가 났었다..

String word = br.readLine();

while(word!=null && word.length()!=0){
	...
}

꼭 readLine 한 다음에 length가 0인지도 확인하자.. 안하니까 진짜 계속 에러났다. 구글링해보니까 다들 null 값인지만 확인해도 된다는데 나는 그게 안돼서 계속 런타임 에러가 났다.

 

아무튼 이런식으로 한 다음에 출력은 BufferedWriter를 통해 출력.

 

아 그리고 String format 맞추는 방법도 기억하자.

 

별거 아닌데 엄청 오래걸렸던 문제ㅠㅡㅠ..

'Algorithm > 백준' 카테고리의 다른 글

백준 1874번 ) 스택 수열 (java)  (0) 2022.02.22
백준 11047번 ) 동전 0 (java)  (0) 2022.02.22
백준 5525번 ) IOIOI (java)  (0) 2021.09.30
백준 5052번 ) 전화번호 목록 (java)  (0) 2021.09.27
11656번 ) 접미사 배열 (java)  (0) 2021.09.26