백준 1015번 : 수열 정렬

dldzm·2021년 1월 22일
0

알고리즘 공부

목록 보기
4/42
post-thumbnail

링크 : 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());

원소 찾는 것은 find 함수를 이용했다. find 함수 사용했을 때의 형태를 보자. 다음을 참고했다.

링크 : https://torbjorn.tistory.com/265


int key = (find(tmp.begin(), tmp.end(), A[i]) - tmp.begin());
tmp[key] = -1;

찾고나서는 -1로 바꿔준다. 중복된 아이가 있으면 계속 똑같은 위치를 return하기 때문이다.

profile
🛰️ 2021 fall ~

0개의 댓글