사용한 것
- 문제를 해결하기 위해 정렬,
HashMap
사용
풀이 방법
- 입력 값을
arr
, tmpArr
두 배열로 받는다.
tmpArr
을 정렬하고 map
에 값과 몇 번째 순서인지 넣어준다.
arr
을 순회하며 map
에서 해당 값의 value가 해당 값보다 큰 값의 수이므로 sb
에 추가 후 출력한다.
코드
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int length = Integer.parseInt(br.readLine());
int[] arr = new int[length];
int[] tmpArr = new int[length];
StringTokenizer st = new StringTokenizer(br.readLine());
int index = 0;
while (st.hasMoreTokens()) {
int num = Integer.parseInt(st.nextToken());
arr[index] = num;
tmpArr[index] = num;
index++;
}
Arrays.sort(tmpArr);
Map<Integer, Integer> map = new HashMap<>();
int ct = 0;
for (int i = 0; i < length; i++) {
if (!map.containsKey(tmpArr[i])) {
map.put(tmpArr[i], ct++);
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(map.get(arr[i]) + " ");
}
System.out.println(sb);
}
}