4358번: 생태학
https://www.acmicpc.net/problem/4358
# 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// 빠른 입출력을 위한 BufferedReader 와 StringBuilder
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 나무의 종류와 개수를 기록할 Map
Map<String, Double> tree = new HashMap<>();
// 나무의 전체 개수 (= 테스트케이스의 수)
long t = 0;
// input 선언만 밖에서 함
String input;
// 입력줄이 존재하는 동안 계속 반복
while ((input = br.readLine()) != null) {
// Map에 이미 종이 있다면 개수를 1 증가시키고, 없다면 개수를 0 + 1로 하여 Map에 추가
tree.put(input, tree.getOrDefault(input, 0.0) + 1);
t++;
}
// ArrayList를 활용해 Key 값을 기준으로 오름차순 정렬
List<String> keySet_tree = new ArrayList<>(tree.keySet());
Collections.sort(keySet_tree);
// 정렬된 순서로 비율을 계산해 StringBuilder 에 쌓기
for (String key : keySet_tree) {
// 해당 종이 차지하는 비율 (소수점 4째자리까지 반올림)
String per = String.format("%.4f", tree.get(key)/t * 100);
// StringBuilder에 쌓기
sb.append(key).append(" ").append(per).append("\n");
}
System.out.println(sb);
// Reader 버퍼 닫기
br.close();
}
}
- Map 을 이용해 나무의 종류와 개수를 묶어 관리한다.
- map.getOrDefault(key, defaultValue) : Map에서 key에 대한 value를 가져오거나, 해당 key가 존재하지 않는다면 디폴트로 value 값을 지정하는 메소드
- Map에서 Key 값을 기준으로 정렬할 때는 map.keySet() 으로 키셋을 가져와 ArrayList 에 넣어서 Collections.sort() 를 사용해 정렬한다. 내림차순은 Collections.reverse() 를 사용하면 된다.
- 소수점 4째자리까지 반올림은 String.format("%.nf", x) 형식으로 스트링 포맷을 사용한다.
처음에는 아래와 같이 if-else 문으로 코드를 작성하였으나, 상위권으로 제출하신 분의 코드를 보고 map.getOrDefault() 메소드를 참고하게 되었다.
내가 딱 하고 싶었던 로직이 정확히 메소드로 존재하다니ㅎ
참 좋은 세상이다.
// 입력줄이 존재하는 동안 계속 반복
while ((input = br.readLine()) != null) {
// Map에 나무 종이 이미 존재한다면 개수 증가
if (tree.containsKey(input)) {
tree.replace(input, tree.get(input) + 1);
} else {
// 처음 등록되는 나무 종이라면 개수를 1로 하여 Map에 추가
tree.put(input, 1.0);
}
t++;
}
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[자료구조2] 백준 11279 최대 힙 (0) | 2024.07.24 |
---|---|
[자료구조2] 백준 2075 N번째 큰 수 (4) | 2024.07.23 |
[자료구조2] 백준 14425 문자열 집합 (2) | 2024.07.21 |
[자료구조2] 백준 1620 나는야 포켓몬 마스터 이다솜 (0) | 2024.07.20 |
[자료구조] 백준 1874 스택 수열 (0) | 2024.07.19 |