링크 : https://www.acmicpc.net/problem/1015
문제 이해하는데 좀 애먹었다. 결론적으로 P는 A 수열의 숫자들이 몇번째로 작은지 저장해놓은 index table인 것이었다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int num, elem;
cin >> num;
vector<int> A;
vector<int> P;
vector<int> tmp;
for (int i = 0; i < num; i++) {
cin >> elem;
A.push_back(elem);
}
tmp.assign(A.begin(), A.end());
sort(tmp.begin(), tmp.end());
for (int i = 0; i < num; i++) {
int key = (find(tmp.begin(), tmp.end(), A[i]) - tmp.begin());
tmp[key] = -1;
P.push_back(key);
}
for (int i = 0; i < num; i++)
cout << P[i] << " ";
return 0;
}
벡터 전체 복사하는데 assign 함수 이용하는 것.
tmp.assign(A.begin(), A.end());
벡터 안에 정렬하는 것은 algorithm::sort() 사용했다.
sort(tmp.begin(), tmp.end());
링크 : https://torbjorn.tistory.com/265
int key = (find(tmp.begin(), tmp.end(), A[i]) - tmp.begin());
tmp[key] = -1;
찾고나서는 -1로 바꿔준다. 중복된 아이가 있으면 계속 똑같은 위치를 return하기 때문이다.