[Code Up] (3004) 데이터 재정렬

Date:     Updated:

카테고리:

태그:

C/C++로 풀이했습니다.
출처 : Code Up 문제 풀이. https://codeup.kr/

🚀 문제

https://codeup.kr/problem.php?id=3004

프로그래밍 문제를 풀다 보면 뒤죽박죽인 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인 정렬된 상태의 인덱스를 출력하는 식으로 코드를 짰다.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

CodeUp 카테고리 내 다른 글 보러가기

댓글 남기기