BOJ_1015_수열정렬_JAVA
문제 : 수열정렬
링크 : BOJ_1015_수열정렬
접근 방식
문제의 내용이 이해가 잘 가지 않아서 입력예제와 출력결과를 보고 문제를 풀었다.
예를 들어 입력 예제가 2, 3, 1 이면 출력은 1 2 0 이 된다. A 배열의 값을 오름차순으로 정렬하면 1 2 3이 되고, 각각의 값에 대해 A배열에서 순번을 매긴것이 1 2 0인 것이다.
위의 방식대로 풀기 위해 Node 클래스를 하나 만들고, Comparable 인터페이스를 구현해서 값과 인덱스를 구분지어 저장하도록 했다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.StringTokenizer;
class Node implements Comparable<Node>{
int ver;
int index;
@Override
public int compareTo(Node o) {
return ver-o.ver;
}
}
public class BOJ_1015_수열정렬 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
Node A[] = new Node[N];
StringTokenizer st = new StringTokenizer(in.readLine());
for(int i=0;i<N;i++) {
A[i] = new Node();
A[i].ver= Integer.parseInt(st.nextToken());
A[i].index = i;
}
Arrays.sort(A);
int B[] = new int[N];
// for(int i=0;i<N;i++) {
// System.out.println("ver : "+ A[i].ver);
// System.out.println ("index : "+ A[i].index);
// }
for(int i=0;i<N;i++) {
B[A[i].index] = i;
}
for(int i=0;i<N;i++) {
System.out.print(B[i]+" ");
}
}
}