※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4358번 문제인 생태학이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4358
4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
각 나무의 개수에서 전체를 나눈 값을 나무별로 계산해 출력해야 하는 문제이다.
각 나무별로 새로운 정수 하나씩을 map으로 할당해 문제를 해결하자.
map(red black tree)은 각 키(key)값을 정렬된 순서로 보관하므로, map의 키를 순서대로 접근하는 것으로 나무 이름을 정렬된 순서대로 접근할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;
map<string, int> mp;
int cnt[10000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout << fixed;
cout.precision(4);
int total = 0;
int idx = 0;
string s;
while (getline(cin, s)) {
if (mp.count(s) == 0) mp.insert(make_pair(s, idx++));
cnt[mp[s]]++, total++;
}
for (auto p : mp) {
cout << p.first << ' ' << (100 * (double)cnt[p.second] / total) << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 1833 // C++] 고속철도 설계하기 (0) | 2022.07.17 |
---|---|
[BOJ 24512 // C++] Bottleneck Travelling Salesman Problem (Small) (0) | 2022.07.17 |
[BOJ 2098 // C++] 외판원 순회 (0) | 2022.07.17 |
[BOJ 10971 // C++] 외판원 순회 2 (0) | 2022.07.17 |
[BOJ 16991 // C++] 외판원 순회 3 (0) | 2022.07.17 |