문제를 이해하는데 시간이 꽤 걸렸다. 문제를 설명하자면, 입력 받은 수가 해당 입력받은 수들의 배열에서 자신보다 적은 수는 몇개가 있는지를 구하는것이다. 이때, 중복은된 수는 제외한다. 즉 2,1,1,4 이렇게 입력을 받으면 2를 압축시키면 1이 된다. 자신보다 작은 수 1이 있기 때문이고, 중복은 제외하기 때문이다.
푸는 방법은 처음에는 카운팅 정렬로 풀으려고 했지만 카운팅은 딱히 의미가 없기에 중복되지 않는 수를 가지는 배열을 만들고, 오름차순으로 정렬을 한 후 입력받은 배열에 해당하는 값을 중복되지 않는 배열의 값이 같은 인덱스를 출력하는 식으로 풀었다.
다만 이 알고리즘은 풀리기는 하나 시간초과가 뜬다. 아무래도 수가 넓게 퍼져있으면 그만큼 시간이 오래걸려서 그런듯 하다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] arr=new int[n];
List<Integer> di_list=new ArrayList();
for(int i=0;i<n;i++){
arr[i]= scanner.nextInt();
if(i==0)
di_list.add(arr[i]);
else {
for (int j = 0; j < di_list.size(); j++) {
if (di_list.get(j) == arr[i]) {
break;
} else if (j == di_list.size() - 1) {
di_list.add(arr[i]);
break;
}
}
}
}
scanner.nextLine();
Collections.sort(di_list);
for(int i=0;i<arr.length;i++){
System.out.print(di_list.indexOf(arr[i])+" ");
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 15650번 : N과 M(2) (0) | 2021.05.14 |
---|---|
백준 15649번 : N과 M(1) (0) | 2021.05.14 |
백준 1181번: 단어정렬(Java) (0) | 2021.05.08 |
백준 11651번 좌표정렬하기2 (0) | 2021.05.07 |
백준 11650번 좌표정렬하기(Java) (0) | 2021.05.07 |