https://www.acmicpc.net/problem/1015
Silver IV
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
int[] ori_arr = new int[n];
int[] arr = new int[n];
int[] cnt = new int[n];
boolean[] is_final = new boolean[n];
for (int i = 0; i < n; ++i) {
arr[i] = Integer.parseInt(sc.next());
ori_arr[i] = arr[i];
}
sc.nextLine();
Arrays.sort(arr);
for (int i = 0; i < n; ++i) {
int min = arr[i];
boolean selected_final = false;
for (int j = 0; j < n; ++j) {
if (is_final[j]) {continue;}
else if (selected_final) {cnt[j] += 1;}
else if (ori_arr[j] == min) {
is_final[j] = true;
selected_final = true;
} else {cnt[j] += 1;}
}
}
for (int i = 0; i < n; ++i) {
System.out.printf("%d ", cnt[i]);
}
sc.close();
}
}
문제가 이해가 국어 이슈(...)로 인해 좀 난해했다.
요약하면 정렬시 각 원소들의 index가 뭔지를 물어보는 것이다. 동일 크기 원소는 자기들끼리 위치가 바뀔 수 있어서 여러 조합이 가능하면 사전순으로 가장 빠른 조합을 고르라고 했다.
n의 크기가 작아서, 순회하는 형식으로 cnt를 늘려 최종 idx를 계산하는 방식을 택했다.
더이상 업데이트 안해도 되는가 -> is_final
로 추적
(동일 원소 대비) 이미 final로 정해진 애가 있는가 -> selected_final
로 추적