728x90
https://www.acmicpc.net/problem/4358
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
1 초 | 256MB | 6097 | 2345 | 1619 | 37.660% |
문제
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.
입력
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.
출력
주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.
<풀이>
- Key값으로 나무 이름을, Value값으로 나무 수를 저장할 HashMap을 만든다.
- 나무의 이름들을 차례로 입력받아서 HashMap에 저장한다.
- 만약 이전에 입력된 적 있던 나무가 나올 경우 key값을 통해 찾아서 value값을 1 증가시켜준다.
- 처음 입력되는 나무라면 나무 수는 한그루이기 때문에 value값에 1을 저장한다.
- 다 저장되었다면 HashMap을 나무이름순으로 정렬하여 전체 나무 수 대비 비율을 출력한다.
사실 알고리즘 자체가 어렵다기보다는 이것저것 처리하거나 사용하는게 귀찮은 문제,,,
- EOF 처리
- 이상하게 이 문제는 조건에 !(s = br.readLine()).equals("")를 넣으면 에러가 난다
- (s = br.readLine()) != null) 로 처리해주었다.
- HashMap 사용
- HashMap key값에 따라서 정렬
- Object[] key = hm.keySet().toArray();
- Arrays.sort(key);
- 소수점 넷째자리까지 반올림
- String.format 사용
소스코드
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));
StringBuilder sb = new StringBuilder();
// key, value값을 차례로 준다
HashMap<String, Integer> hm = new HashMap<String, Integer>();
String s = "";
int n = 0; // 총 나무 수
// EOF처리
while ((s = br.readLine()) != null) {
n++;
// 이미 그 나무가 HashMap 안에 존재한다면
if (hm.containsKey(s)) {
// 나무 개수에 +1을 한다.
hm.put(s, hm.get(s) + 1);
} else {
// 처음 추가되는 나무라면 나무 개수는 1
hm.put(s, 1);
}
}
// Key값 순서대로 정렬
Object[] key = hm.keySet().toArray();
Arrays.sort(key);
// 출력 조건에 따라서 출력
for (int i = 0; i < key.length; i++) {
int val = hm.get(key[i]);
double rate = (double) (100 * val) / n;
sb.append(key[i] + " " + String.format("%.4f", rate) + "\n");
}
System.out.println(sb);
}
}
'플밍 > 문제풀이' 카테고리의 다른 글
[Java] BOJ2212, 백준 - 센서 (0) | 2021.08.24 |
---|---|
[Java] BOJ1987, 백준 - 알파벳 (0) | 2021.08.24 |
[Java] BOJ1747, 백준 - 소수&팰린드롬 (0) | 2021.08.23 |
[Java] BOJ1662, 백준 - 압축 (0) | 2021.08.18 |
[Java] BOJ1781, 백준 - 컵라면 (0) | 2021.08.16 |