풀이 (파이썬)

import sys; import collections

N = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().strip().split()))

new_nums = list(set(nums))
new_nums.sort()

graph = collections.defaultdict(int)

for i in range(len(new_nums)):
    graph[new_nums[i]] = i

for num in nums:
    print(graph[num], end=' ')

 

풀이 (자바)

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(bf.readLine());
        List<Integer> arr = new ArrayList<>();

        String[] tmpInput = bf.readLine().split(" ");
        for (int i = 0; i < N; i++) {
            arr.add(Integer.parseInt(tmpInput[i]));
        }

        Set<Integer> tmpset = new HashSet<>(arr);
        List<Integer> arrList = new ArrayList<>(tmpset);

        Collections.sort(arrList);

        List<Integer> rst = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            Integer a = Collections.binarySearch(arrList, arr.get(i));
            rst.add(a);
        }

        for (int i = 0; i < N; i++) {
            bw.write(String.valueOf(rst.get(i)) + " ");
        }
        bw.close();
    }
}

해설?

  • 분류에 정렬이 있어서 스포당해버렸다.
  • 중복 값을 제거한 후 정렬하여 그 인덱스를 사용하면 된다.
복사했습니다!