본문 바로가기
Java/백준

[java 백준] 실버 1/ 4358번 생태학

by Meaning_ 2022. 4. 29.
728x90
반응형

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

 

4358번: 생태학

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

www.acmicpc.net

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.io.*;
import java.util.*;
 
import static java.lang.Math.max;
 
public class Main {
    public static int cnt=0;
    public static HashMap<String,Integer>hashMap=new HashMap<String,Integer>();
    public static HashMap<String,String>finalMap=new HashMap<String,String>();
 
    public static void main(String[]args) throws IOException {
 
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 
        while(true){//EOF 판단
            String s= br.readLine();
 
            if(s==null||s.equals("")){
                break;
            }
            cnt++;
            hashMap.put(s, hashMap.getOrDefault(s,0)+1);
        }
        for(String s:hashMap.keySet()){
            double percent=(double)hashMap.get(s)/(double)cnt;
            finalMap.put(s,String.format("%.4f",percent*100));
        }
 
        
        List<String> keys = new ArrayList<>(finalMap.keySet());
        Collections.sort(keys); //key를 기준으로 오름차순 정렬
        for (String key : keys) {
            System.out.println(key+" "+finalMap.get(key));
        }
 
 
    }
 
 
 
 
 
 
 
}
cs

 

1.EOF판단

 

입력하는 값의 개수가 주어지는게 아니라 계속 값이 주어지니까 input 값이 공백이거나 null일때 while문을 끊어줘야한다. 

 

2. HashMap에서 중복개수 확인

 

출력값이 species percent 이기 때문에 HashMap을 이용해줬고,

HashMap에서 중복 개수를 확인할 때 

 

https://velog.io/@w-beom/Java-HashMap%EC%9D%98-getOfDefault-%EC%A4%91%EB%B3%B5-%EA%B0%AF%EC%88%98-%ED%99%95%EC%9D%B8

 

[Java] HashMap의 getOfDefault() : 중복 갯수 확인

getOfDefault() 메소드를 사용해서 배열의 중복되는 값의 갯수를 알아보자!

velog.io

 

getOrDefault를 사용한다. 

 

https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C

 

[JAVA] Map - getOrDefault 이란? 사용법 및 예제

getOrDefault - 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드 사용 방법 getOrDefault(Object key, V DefaultValue) 매개 변수 : 이 메서드는 두 개의 매개 변수를 허용합니.

junghn.tistory.com

 

getOrDefault(key,defaultValue) 순으로 쓰는데 key는 값을 가져와야하는 요소의 키이고

defaultValue는 키에 해당하는 값이 없는 경우 반환되어야 하는 기본 값이다.

 

 hashMap.put(s, hashMap.getOrDefault(s,0)+1);

 

s는 key이고 s에 해당하는 value가 없을 경우 0을 반환하고 그게 아니면 원래 value값에서 1을 더해준다는 의미이다.

 

3. HashMap에서 key값을 기준으로 오름차순 정렬 

 

key값을 기준으로 정렬하고 싶을 때는 TreeMap을 사용한다.

 

 

https://woovictory.github.io/2020/11/10/Map-Sort/

 

[Java] Map 정렬

Prologue Java에서 HashMap을 사용하면서 정렬이 필요할 때, 어떻게 정렬해야 하는지에 대해 정리한다.

woovictory.github.io

 

 List<String> keys = new ArrayList<>(finalMap.keySet());

--> HashMap의 key들을 담아줄 keys라는 리스트를 만들고

Collections.sort(keys); //key를 기준으로 오름차순 정렬

--> keys리스트를 오름차순 정렬한다. 

  for (String key : keys) {

 

            System.out.println(key+" "+finalMap.get(key));
--> 오름 차순 정렬 된 애들을 차례대로 출력하고 그 키에 해당하는 value를 get메서드를 이용해
출력한다.

 

   }
 

keySet()

https://tychejin.tistory.com/31

 

[Java] Map 전체 출력(entrySet, keySet, Iterator)

Map에 값을 전체 출력하기 위해서는 entrySet(), keySet() 메소드를 사용하면 되는데 entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용하고, keySet() 메서드는 key의 값만 ..

tychejin.tistory.com

keySet는 key값이 필요할때만 사용

entrySet는 key와 value 모두 필요할 때 사용 

728x90
반응형

댓글