https://www.acmicpc.net/problem/4358
시간 1초, 메모리 256MB
input :
output :
모든 나무들의 입력횟수를 기록하는 변수를 이용해서, 각 나무들의 입력된 횟수를 나눔으로 정답을 출력할 수 있습니다.
파이썬으로 하려 했지만, 파이썬이 시간복잡도를 감당하지 못해서 자바로 풀어봅시다.
딕셔너리 형태를 이용해야 하니까, Map을 통해서 "나무의 종" : 입력 횟수 를 저장합니다.
횟수를 기록한 후, key값들을 사전순으로 정렬하여야 합니다.
자바에서 key값들을 다 받아내는 방법은 data.keySet()을 이용합니다.
이를 통해 얻어낸 Set을 List로 바꾸어 줍니다.
그리고 이 구조를 Array(배열, List 아님)로 바꾸기 위해 .toArray()를 사용합니다.
Object[] keys = data.keySet().toArray();
Arrays.sort(keys);
이후 keys에 존재하는 값들을 출력 하면서 입력된 비율을 출력해야 하는데
입력 횟수 / 전체 횟수 * 100 을 통해 비율을 만들어 주고, 4째 자리 까지 출력하기 위해 String.format("%.4f", ans)를 이용합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
public class App {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static HashMap<String, Integer> data = new HashMap<>();
public static void main(String[] args) throws IOException {
String s = "";
int total = 0;
while ((s = br.readLine()) != null){
if (data.containsKey(s)){
int cnt = data.get(s);
data.put(s, cnt + 1);
}else
data.put(s, 1);
total++;
}
Object[] keys = data.keySet().toArray(new String[0]);
Arrays.sort(keys);
for (Object item : keys){
int temp = data.get(item);
double ans = (double)temp / total * 100;
System.out.println((String) item + " " + String.format("%.4f", ans));
}
}
}