문제 링크

요약

  • 쉬운 문제

최종

  • LeetCode 3534 풀 때처럼 sort 하고 index map 을 만들어서 풀면 된다.
struct Elem {
	int num;
	int idx;
 
	bool operator<(const Elem& other) const {
		return num < other.num;
	}
};
 
class Solution {
public:
	vector<int> arrayRankTransform(vector<int>& arr) {
		int n = arr.size();
		vector<Elem> sorted(n);
		vector<int> sort_map(n);
		vector<int> ret(n);
 
		if (!n) {
			return ret;
		}
 
		for (int i = 0; i < n; i++) {
			sorted[i].num = arr[i];
			sorted[i].idx = i;
		}
 
		sort(sorted.begin(), sorted.end());
 
		for (int i = 0; i < n; i++) {
			sort_map[sorted[i].idx] = i;
		}
 
		ret[sorted[0].idx] = 1;
		for (int i = 1; i < n; i++) {
			if (sorted[i - 1].num < sorted[i].num) {
				ret[sorted[i].idx] = ret[sorted[i - 1].idx] + 1;
			} else {
				ret[sorted[i].idx] = ret[sorted[i - 1].idx];
			}
		}
 
		return ret;
	}
};

다른 풀이

Map

  • Map 도 이어서 괜찮겠거니 했는데, 생각보다 느리다.