https://www.acmicpc.net/problem/4358
4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
문제
생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.
입력
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.
출력
주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.
해결방안 -> 나무의 종을 입력받고 해당 맵의 key값에 대응하는 value값 증가시키고 백분율을 구하면 된다.
새로 배운점 : std::getline() 과 cout<<fixed로 소수점 자리 고정하기
std::getline()
->
istream& getline (istream& is, string& str)
std::getline() -> <string>에 정의되어 있고, string형에 문자열을 저장할 떄 사용한다.
std::getline()의 첫번쨰 매개변수에 따라 파일입력을 받을지,표준 입력을 받을지 결정한다.
getline()을 통해 표준입력을 받는 경우 ,엔터의 여부에 따라서 입력받을 문자열을 구분한다.
std::getline()의 두번쨰 매개변수에는 문자열을 저장할 string 형 변수명,
std::getline()의 세번째 매개변수에는 입력받을 문자들 중에 어느 문자 전까지 저장을 할건지 결정한다.
세번째 매개변수가 default인 경우 '\n'이 지정된다.
cout<<fixed
cout << precision(n) ->인자로 n을 받고, n자리를 나타낸다.
cout << fixed를 추가하면 소수점 이하의 자릿수만 다룰 수 있게 된다.
전체 소스 코드->