Algorithm/문제풀이

[C++] 백준 알고리즘 3077 임진왜란

사과당근 2021. 9. 27. 03:30

3077 문제

정답은 map으로 저장하고 학생의 답은 vector로 저장했다.

정답을

o[a]=0

o[b]=1

o[c]=2

으로 저장하고

 

학생의 답을 x[0]=a, x[1]=c, x[2]=b 로 저장을 했으니

정답의 맵의 key에 vector의 요소를 넣어주고 value의 크기를 비교해주면 된다.

#include<iostream>
#include<map>
#include<vector>

using namespace std;

int main() {
	map<string, int> o;
	vector<string> x;
	int n, temp;
	cin >> n;
	temp = n;

	//정답 map으로 저장
	string s;
	while (temp--) {
		cin >> s;
		o[s] = n - temp;
		
	}

	//학생의 답 vector로 저장
	temp = n;
	while (temp--) {
		cin >> s;
		x.push_back(s);
	}
	
	//정답 구하기
	int answer = 0;
	for (int i = 0; i < n - 1; i++) {
		for (int j = i + 1; j < n; j++) {
			//o[alpa]=0, o[beta]=1
			//위와 같이 저장되어있으므로 비교해서 카운트
			if (o[x[i]] < o[x[j]]) answer++;
		}
	}

	cout << answer << '/' << n*(n-1)/2 << '\n';

}