코디잉

4358번: 생태학 [JAVA] 본문

자료구조&알고리즘/백준

4358번: 생태학 [JAVA]

yong_ღ'ᴗ'ღ 2023. 7. 20. 01:14

https://www.acmicpc.net/problem/4358

 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

 

접근 방식)

나무의 이름을 입력받으면서 전체 나무 개수를 세고, 

HashMap으로 나무 이름을 key값으로 두고 나무이름이 나오면 value값을 증가시키면 된다.

입력이 없으면, 반복문 멈추고 출력해주면 된다.

"나무이름 (현재 나무 개수 / 전체 나무 개수 * 100)"

 

1. scanner의 hasNextLine()을 사용해서 다음에 읽을 값이 있는지 확인하며 반복문을 돈다.

2. map에 나무 이름이 있으면 기존 값을 가져와서 1을 더해주고, 없으면 default값인 0을 가져와서 1을 더해준다.  

    그리고 전체나무개수를 새기 위해 total을 증가시킨다.

3. 나무 이름 사전순으로 출력해야하니까 오름차순 정렬수행

4. 백분율 계산해서, 소수점 4째자리까지 반올림해서 출력해준다.

 

import java.util.*;
public class B_4358 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap<String, Integer> map = new HashMap<>();
        int total = 0;
        
        while (sc.hasNextLine()) {
            String name = sc.nextLine();
            map.put(name, map.getOrDefault(name, 0) + 1);
            total++;
        }

        List<String> list = new ArrayList<>(map.keySet());
        Collections.sort(list);
        
        StringBuilder sb = new StringBuilder();
        for (String name : names) {
            double rate = (double)map.get(name) / total * 100;
            sb.append(name).append(' ').append(String.format("%.4f", rate)).append('\n');
        }
        System.out.println(sb);
    }
}

 

'자료구조&알고리즘 > 백준' 카테고리의 다른 글

2606번: 바이러스_DFS/BFS [JAVA]  (0) 2023.07.21
11286번: 절댓값 힙 [JAVA]  (0) 2023.07.20
2075번: N번째 큰 수 [JAVA]  (0) 2023.07.20
11279번: 최대 힙 [JAVA]  (0) 2023.07.20
2346번: 풍선 터뜨리기 [JAVA]  (0) 2023.07.19
Comments