https://www.acmicpc.net/problem/4358
코드설명
HashMap + toArray를 활용합니다.
문제에서 알면 좋은 함수들이 많았습니다.
1. hashmap.keySet().toArray();
Object[] keyArr = hashmap.keySet().toArray();
Arrays.sort(keyArr);
이 코드에서는 자동으로 keySet을 Array로 Object 형식으로 반환합니다.
물론, String으로 Casting 하여도 되지만, 모든 자료형은 Object를 상속하고 있기에 단순히 Object를 사용해도 괜찮습니다.
그리고 Arrays.sort(keyArr)으로 오름차순으로 출력하도록 합니다.
물론, PriorityQueue나 이런것들을 활용해도 되겠지만, 그렇게했다면 코드가 길어졌을 것 입니다.
2. String.format("%.4f", percentage) 로 소수점 넷째짜리까지 반올림합니다.
double percentage = ( (double) value / (double) count) * 100;
sb.append(keyArr[i]+" ").append(String.format("%.4f", percentage) + "\n");
코드
package algorhythm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
public class Main {
public static int N, T;
public static HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
public static int answer = 0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringTokenizer st = new StringTokenizer(br.readLine());
//전체 나무의 개수를 구합니다.
int count = 0;
while(true) {
String input = br.readLine();
if(input == null || input.equals("")) {
break;
}
hashmap.put(input, hashmap.getOrDefault(input, 0) + 1);
count += 1;
}
Object[] keyArr = hashmap.keySet().toArray();
Arrays.sort(keyArr);
StringBuilder sb = new StringBuilder();
for(int i=0; i<keyArr.length;i++) {
//해당 종의 개수.
int value = hashmap.get(keyArr[i]);
double percentage = ( (double) value / (double) count) * 100;
sb.append(keyArr[i]+" ").append(String.format("%.4f", percentage) + "\n");
}
System.out.println(sb.toString());
}
}
두번쨰 코드입니다.
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;
public class Main {
public static int N, C, H, W, K, M, T;
public static int answer = 0;
public static TreeMap<String, Integer> hashmap = new TreeMap<>();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
int cnt = 0;
while( (line = br.readLine()) != null && !line.equals("")) {
hashmap.put(line, hashmap.getOrDefault(line, 0) + 1);
cnt += 1;
}
for(Map.Entry<String, Integer> entrySet : hashmap.entrySet()) {
double percent = ( (double) entrySet.getValue() * 100 / cnt);
System.out.print(entrySet.getKey());
System.out.printf(" %.4f\n", percent);
}
}
}
'알고리즘 > 해시를 사용한 집합과 맵' 카테고리의 다른 글
[백준] 2002 추월 - HashMap(해시맵) + 구현(Implementation) JAVA (0) | 2024.04.03 |
---|---|
[백준] 16165 걸그룹 마스터 준석이 - HashMap(해시맵) + HashSet(해시셋) + TreeSet(트리셋) JAVA (0) | 2024.04.02 |
[백준] 13414 수강신청 - LinkedHashSet(해시셋) JAVA (0) | 2024.04.01 |
[백준] 9375 패션왕 신해빈 - HashMap(해시맵) + 시간초과(경우의 수에 대한 이해) JAVA (0) | 2024.03.28 |
[백준] 2910 빈도 정렬 - LinkedHashMap(링크드해시맵) + LinkedHashSet(링크드해시셋) + Comparable JAVA (0) | 2024.03.28 |