728x90
반응형

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

 

데이터 재정렬

50 23 54 24 123 에서 23, 24, 50, 54, 123 순서로 0, 1, 2, 3, 4 가 된다. 그리고 원래의 위치대로 출력한다.

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 <stdlib.h>

int main()
{
	int n,i,j,cnt=0;
	scanf("%d",&n);
	int *arr1 = (int*)malloc(n * sizeof(int));
	int *arr2 = (int*)malloc(500000 * sizeof(int));
	
	for(i = 0 ;i <n; i++)
	{
		scanf("%d",&arr1[i]);
		++arr2[arr1[i]];
	}
	
	for(i = 0; i<500000; ++i)
	{
		if(arr2[i] > 0)
			arr2[i] = cnt++;
	}
	
	for(i = 0; i<n; i++)
	{
		printf("%d ",arr2[arr1[i]]);
	}
	
	
	free(arr1);
	free(arr2);
	
	return 0;
	
}

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기