Algorithm/문제풀이
[C++] 백준 알고리즘 3077 임진왜란
사과당근
2021. 9. 27. 03:30
정답은 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';
}