/ BOJ

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]+" ");
		}


	}

}