https://www.acmicpc.net/problem/4358
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, Integer> hashMap = new HashMap<>();
int total = 0;
while(true){
String tree = br.readLine();
if(tree==null) break;
//나무 명 입력 받아서 hashmap에 넣는다.
//넣기 전에 hashmap에 그 나무 이름 있는지 검사
//있으면 그루 수 ++
//없으면 나무 넣기
total++;
if(hashMap.containsKey(tree)){
int cnt = hashMap.get(tree);
hashMap.put(tree, cnt + 1);
}
else{
hashMap.put(tree,1);
}
}
//정렬
Map<String, Integer> sortedMap = new TreeMap<>(hashMap);
//출력
for(Map.Entry<String, Integer> entry: sortedMap.entrySet()){
double treeCnt = entry.getValue();
System.out.println(entry.getKey()+" "+String.format("%.4f",treeCnt/total*100));
}
}
}
입력이 언제 끝나는지 모를 때에는 br.readLine()==null일 때 멈추게 하면 된다.
처음에 br.readLine().equals("")로 했다가 NullPointerException이 났다.
HashMap 사용, 정렬에는 TreeMap 사용
반올림 자리수 출력에는 String.format("%.4f", number)을 사용했다.
if(hashMap.containsKey(tree)){
int cnt = hashMap.get(tree);
hashMap.put(tree, cnt + 1);
}
else{
hashMap.put(tree,1);
}
이 부분을 getOrDefault를 써서 구현할 수도 있다.
hashMap.put(tree, hashMap.getOrDefault(tree,0)+1);
어디서 getOrDefault를 쓰면 성능이 떨어진다는 말을 들었는데 이 부분은 알아보아야겠다.
HashMap 정리 : https://tech-heng.tistory.com/55
'알고리즘' 카테고리의 다른 글
[BOJ] 2667번 : 단지번호붙이기 (JAVA) (1) | 2023.01.22 |
---|---|
[BOJ] 4889번 : 안정적인 문자열 (JAVA) (0) | 2023.01.20 |
[BOJ] 4659번 : 비밀번호 발음하기 (JAVA) (0) | 2023.01.18 |
[BOJ] 2870번 : 수학숙제 (JAVA) (0) | 2023.01.18 |
[BOJ] 10808번 : 알파벳 개수(JAVA) (0) | 2023.01.18 |