관리 메뉴

한다 공부

[C++] 백준 알고리즘 4358번 생태학 본문

Algorithm/문제풀이

[C++] 백준 알고리즘 4358번 생태학

사과당근 2021. 9. 12. 20:59

난이도가 gold라 어려울줄 알았는데

생각보다 어렵지 않던 문제...!

 

4358

공백을 입력받아야하므로

cin 대신 getline을 쓰고

 

소숫점 넷째자리까지 나타내기위해

아래와 같이 쓰면 된다

cout << fixed;
cout.precision(4);

 

cout << fixed;를 사용하지 않으면

셋째짜리까지 나타내고 나머지는 버려진다

 

 .precision(n) -> n번째 자리까지 반올림

 

 

#include<iostream>
#include<string>
#include<map>

using namespace std;

int main() {
	map<string, int> tree;
	string temp;
	int count = 0;

	//계속 입력을 받다가 입력이 없으면 무한루프 탈출
	//공백도 입력받아야 하므로 cin말고 getline으로
	//getline은 엔터 전까지의 문자열을 입력받음
	while (true) {
		getline(cin, temp);
		if (temp == "") break;

		//새 나무라면 갯수 1개
		if (tree[temp] == NULL) {
			tree[temp] = 1;
		}

		//카운트 했던 나무라면 갯수 +1
		else
			tree[temp]++;
		
		//전체 나무 카운트(백분율 계산시 이용)
		count++;
	}

	//소수점 넷째자리까지 반올림하는 법
	cout << fixed;
	cout.precision(4);

	//형변환 안해주면 출력값 0 나옴, 형변환 해주기
	for (auto i : tree)
		cout << i.first << ' ' << (float) (i.second) / count * 100<<"\n";
}

출력결과 잘 나옴!

입력을 다 하고, 아무것도 입력을 안하고 엔터를 누르면 출력값이 나온다.

 

다른 백준 문제들은 몇 개의 입력을 받을건지 지정하는데

이 문제는 그러지 않아서 신기했다