백준 18870번 ) 좌표 압축

하우르·2021년 4월 26일

문제

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.

X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.

입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.

출력

첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.

구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
	static StringBuilder builder = new StringBuilder();

	public static void main(String[] args) throws IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(reader.readLine());
		StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
		int[] nums = new int[N];
		for(int i=0;i<N;i++)
			nums[i] = Integer.parseInt(tokenizer.nextToken());

		int[] temo_nums=nums.clone();
		Arrays.sort(nums);
		HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
		int j=0;
		for(int i=0;i<N;i++)
		{
			if(!map.containsKey(nums[i]))
			{
				map.put(nums[i], j);
				j++;
			}

		}
		for(int i=0;i<N;i++)
		{
			builder.append(map.get(temo_nums[i])).append(" ");
		}
		System.out.println(builder);
	}
}
profile
주니어 개발자

0개의 댓글