C++ / [25206] unordered_map 활용

DEV주녁 ㅣ 2024. 6. 23. 23:54

문제 설명

 


코드
#include <iostream>
#include <unordered_map>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

	unordered_map<string, float> grades =
	{ {"A+", 4.5}, {"A0", 4.0}, {"B+", 3.5},
	  {"B0", 3.0}, {"C+", 2.5}, {"C0", 2.0},
	  {"D+", 1.5}, {"D0", 1.0}, {"F", 0} };

	float totalScore = 0, totalGrade = 0;

	for (int i = 0; i < 20; i++)
	{
		string name, grade;
		float score;

		cin >> name >> score >> grade;

		if (grade == "P")
			continue;

		totalScore += score;
		totalGrade += score * grades[grade];
	}

	cout << totalGrade / totalScore << '\n';
}

 

풀이 설명

이 문제를 쉽게 해결하는 방법으로 Map자료구조를 사용하는 것을 생각했다.

우선 입력을 과목, 점수, 등급 총 3개를 받는다.

과목 명은 딱히 중요하지 않으니 따로 저장을 하지는 않는다.
등급표에 따른 학점을 m_grades라는 맵에 학점과 등급을 저장한다.

그 후 입력에서 학점이 P가 아닐 경우에는
1. totalScore에 학점을 계속 더해준다.
2. totalGrade에 학점과 과목 평점을 곱한 값을 계속 더해준다.

마지막으로 과목 평점을 출력하기 위해
totalGrade의 값을 totalScore의 값으로 나눠 출력한다.

tip.
과목 평점의 경우 정렬을 할 필요가 없기 때문에
속도가 더 빠른 unordered_map을 사용하면 더욱 효율적이다.