
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] original = new int[N];
Integer[] sorted = new Integer[N];
HashMap<Integer, Integer> ranking = new HashMap<>();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
original[i] = Integer.parseInt(st.nextToken());
sorted[i] = original[i];
}
Arrays.sort(sorted);
int rank = 0;
for (int i = 0; i < N; i++) {
if (!ranking.containsKey(sorted[i])) { //key값에 정렬된 입력값이 있으면
ranking.put(sorted[i], rank++); //정렬된 값을 꺼내고 랭크를 증가
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
sb.append(ranking.get(original[i])).append(' ');
}
System.out.println(sb);
}
}
1.등수물어보는 문제로구나!
2.두개의 배열을 선언하고 사용자에게 값을 입력받아 복사한다.
3.해시맵을 활용해서 키값에 등수를 넣고 있으면 count값을 증가시킨다.
4.해시맵을 통해 등수,값 이렇게 저장
5.StringBuilder를 통해 등수를 출력
StringBuilder와 배열의 복사 개념,해시맵을 조금 더 능숙하게 활용할 수 있도록 연습!