https://www.acmicpc.net/problem/1015
<코드>
#include <iostream>
#include <utility>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
int main()
{
int n;
cin>>n;
vector<pair<int,int>>v;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
v.push_back(make_pair(a,0));
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j) continue;
if(v[j].first>v[i].first) v[j].second++;
else if(j>i && v[j].first==v[i].first) v[j].second++;
}
}
for(int i=0;i<v.size();i++)
{
cout<<v[i].second<<' ';
}
}
<풀이과정>
원소가 다른 원소보다 큰 경우를 따지면 된다.
pair벡터에서 벡터의 첫번째 원소가 다른 첫번째 원소보다 크다면 두 번째 원소의 값을 1 증가시켜주면 된다.
하지만, 같은 경우도 고려해야한다. 만약에 같다면, 원소의 위치가 오른쪽에 있다면 두 번째 원소의 값을 1 증가시켜주면 원소를 비내림차순으로 정렬시킬 수 있게 된다.
'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글
백준 2805 나무 자르기(c++) (0) | 2022.07.18 |
---|---|
백준 2776 암기왕(c++) (0) | 2022.07.18 |
18870 좌표 압축(c++) (0) | 2022.07.13 |
백준 20291 파일 정리(c++) (0) | 2022.07.12 |
백준 1374 강의실(c++) (1) | 2022.07.11 |