백준(BOJ) 문자열 문제집: 생태학(골드 5)
문제 출처: https://www.acmicpc.net/problem/4358
이전에 Python으로 풀었던 문제
2021.06.24 - [Algorithms/백준] - [백준_4358]생태학 with Python
1. 알고리즘
Python때랑 알고리즘 자체는 똑같다...근데 자료형 때문에 고민이었음. 일단 HashMap을 사용해봤었으니까 HashMap에 데이터 저장하고, 정렬해서 풀었다. 그런데 TreeMap같이 정렬되는 애들 쓰면 훨씬 간편할 듯. 공부해야지...
- 한 줄씩 입력받아 HashMap에 저장
- 나무 갯수 카운팅
- HashMap의 키 집합을 가져와서 정렬
- 정렬한 데이터를 기준으로 반복, 비율 계산 후 출력
- HashMap에 키로 데이터를 가져와 비율 계산
- 출력
2. 유의 사항
- Python 문제 풀이 글 참고
3. 어려웠던 점, 해결 방법
- Python 때와 마찬가지로 끝까지 입력받는 게 힘들었음
- BufferedReader로 readLine() 값이 null 이거나 readLine() 한 String 길이가 0일 때 중지하도록 함
4. 소스코드
자세한 설명은 주석 참고
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
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, Integer> trees = new HashMap<>(); //나무 데이터 저장할 HashMap
double totalTrees = 0; //전체 나무 갯수
String tree;
while((tree = br.readLine())!=null && tree.length()!=0) { //입력받은 값이 null이거나 입력받은 값의 길이가 0일때 break
// HashMap에 나무 데이터 저장
//key=tree, value=값이 있으면 그 값, 없으면 0을 가져와서 +1
trees.put(tree, trees.getOrDefault(tree, 0)+1);
totalTrees++; //전체 나무 갯수 카운팅
}
Object[] treeKey = trees.keySet().toArray(); //HashMap의 Key데이터
Arrays.sort(treeKey); //Key데이터(=나무 이름) 사전 순 정렬
for(Object t: treeKey) {
double rate = (trees.get(t)/totalTrees)*100; //비율 계산
String strRate = String.format("%.4f", rate); //소숫점 넷째자리까지
System.out.println(t+" "+strRate); //출력
}
}
}
|
cs |
5. 고민
- 자료형 너무 많아...공부할 거 너무 많아...
'Algorithms > 백준' 카테고리의 다른 글
[백준_1463]1로 만들기 with Python, Java (0) | 2021.10.12 |
---|---|
[백준_16236]아기 상어 with Python, Java (0) | 2021.08.26 |
[백준_12904]A와 B with Python (0) | 2021.06.30 |
[백준_2671]잠수함식별 with Python (0) | 2021.06.30 |
[백준_4358]생태학 with Python (0) | 2021.06.24 |
댓글