본문 바로가기
CodingTest/백준

[c++] 백준 - 25206: 너의 평점은

by Daybreak21 2023. 5. 16.

25206번: 너의 평점은 (acmicpc.net)

 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

이 문제는 map(각 노드가 key와 value 쌍으로 이루어진 트리)을 사용하여 풀었다. 

#include <iostream>
#include <cstring>
#include <map>
using namespace std;

int main() {

	map <string, double> scr;
	scr["A+"] = 4.5; scr["A0"] = 4.0;
	scr["B+"] = 3.5; scr["B0"] = 3.0;
	scr["C+"] = 2.5; scr["C0"] = 2.0;
	scr["D+"] = 1.5; scr["D0"] = 1.0;
	scr["F"] = 0;

	double sumOfscr = 0, sumOfcrd = 0, crd;
	string sub, rat; 
	for (int i = 0; i < 20; i++) {
		cin >> sub >> crd >> rat;

		if (rat[0] == 'P') { continue; }
		sumOfscr += crd * scr[rat];
		sumOfcrd += crd;
	}

	cout << sumOfscr/sumOfcrd;

	return 0;
}

 

이 문제를 봤을때 파이썬의 딕셔너리가 떠올랐다. 하지만 c++의 자료형에는 딕셔너리가 없다는 것을 알고있었고, 비슷한 템플릿을 찾다가 map이란 컨테이너를 발견하게 되었다. 

map은 트리로 구현되있다 보니 시간복잡도 측면에서 이득을 볼 것같아 사용하였다.