주어진 사건들의 이름에 대응되는 인덱스들만 저장해서 나중에 O(N2) 만큼 돌면서 크기가 i번째 이후 중에서 i번째보다 큰 인덱스만 세려고 했다.
자료구조 map을 써서 각 사건들의 인덱스를 저장한 후, 사건이 입력될 때마다 j=i+1~N 의 반복문에서 index[ 사건[i] ] < index[ 사건[j] ] 를 썼더니 map에서 조회 연산이 O(NlogN) 이라 그런지 시간초과를 먹었다. (당시에는 map에서 조회하는 연산을 생각하지 못해서 30분 정도 삽질한듯..
#include <bits/stdc++.h>
using namespace std;
int main(){
int i, j, n;
char s[16];
scanf("%d ", &n);
map<string, int> index;
for(i=0; i<n; ++i){
scanf("%s ", s);
index[s] = i;
}
int a[2501];
for(i=0; i<n; ++i){
scanf("%s ", s);
a[i] = index[s];
}
int r = 0;
for(i=0; i<n; ++i){
for(j=i+1; j<n; ++j) r += a[i] < a[j];
}
printf("%d/%d", r, n*(n-1)/2);
return 0;
}
댓글 없음:
댓글 쓰기