[Code Up] (3004) 데이터 재정렬
카테고리: CodeUp
태그: Coding Test Algorithm
C/C++로 풀이했습니다.
출처 : Code Up 문제 풀이. https://codeup.kr/
🚀 문제
프로그래밍 문제를 풀다 보면 뒤죽박죽인 N개의 데이터를 숫자의 크기 순으로 0 ~ N-1까지의 숫자로 재정렬 해야되는 경우가 종종 있다.
예를 들어 N=5 이고,
50 23 54 24 123
이라는 데이터가 있다면,
2 0 3 1 4
가 된다.
데이터를 재정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 데이터의 개수 N이 입력된다. ( 1 <= N <= 50,000)
둘째 줄에 공백으로 분리되어 N개의 서로 다른 데이터가 입력된다. (값의 범위:0~500,000)
출력
N개의 데이터를 0 ~ N-1로 재정렬하여 출력하라.
입력 예시
5
50 23 54 24 123
출력 예시
2 0 3 1 4
🚀 내 풀이 ⭕
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
unordered_map<int, int> m;
vector<int> v(n);
for (int i = 0; i < n; ++i)
cin >> v[i];
vector<int> temp = v;
sort(temp.begin(), temp.end());
for (int i = 0; i < n; ++i)
m[temp[i]] = i;
for (int i = 0; i < n; ++i)
cout << m[v[i]] << ' ';
}
원래의 순서를 기억하고 있어야 하기에, 원래의 순서는 v
에 저장해두고, 이 v
를 복사한 temp
를 정렬시켰다. 정렬한 이 temp
원소들을 Key 로, 정렬된 상태의 인덱스를 Value 로 하여 해시맵에 기억해두고 정렬 전 상태인 v
를 순회하면서 Value인 정렬된 상태의 인덱스를 출력하는 식으로 코드를 짰다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기