Algorithm/백준 알고리즘

백준_4358 생태학(자바) / 문자열

미스터로즈 2021. 10. 6. 14:22

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;

public class Back_4358 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		HashMap<String, Integer> hm = new HashMap<String, Integer>();
		String tmp;
		int sum=0;
		while(true) {
			tmp = br.readLine();
			if(tmp == null || tmp.length()==0) {
				break;
			}
			sum++;
			hm.put(tmp, hm.getOrDefault(tmp, 0)+1);
		}
		
		Object[] obs = hm.keySet().toArray();
		Arrays.sort(obs);
		
		StringBuilder sb = new StringBuilder();
		for(Object o : obs) {
			String Str = (String) o;
			int count = hm.get(Str);
			double per = (double)(count * 100.0) / sum;
			
			sb.append(Str + " " + String.format("%.4f", per) + "\n");	// 소수점 4번 째 자리까지 출력 
		}
		
		System.out.println(sb.toString());
	}
}

 

※ 내 생각

이 문제는 문자열을 이용하여 해결하는 문제입니다.
먼저 문자열을 키로 한 Hashmap을 이용하고 이미 값이 있으면 value를 증가 시키기 위해
getOrDefault를 사용합니다.

또한 정렬을 진행해 줍니다.
그 후에 계산을 통해서 원하는 값을 얻어주면 됩니다.