자바에서 배열의 한 원소로 튜플을 활용하고 싶다면..

1. 문제

 

양의 정수를 원소로 갖는 길이가 N인 수열이 입력으로 주어졌을 때, 이 수열을 오름차순으로 정렬 했을 때 각각의 위치에 있던 원소가 어느 위치로 이동하는지 출력하는 코드를 작성

 

2. 풀이

 

배열을 정렬할때, 배열의 index도 동시에 움직여야하는데, 배열은 index랑 값을 동시에 활용할 수 없으니(동적 배열은 될 것 같기도하고...??)

 

배열의 값과 index를 동시에 가지는 새로운 클래스를 직접 정의하고

 

해당 클래스를 원소로 가지는 배열을 정렬하여

 

각 index가 정렬한 배열에서 어디에 위치하고 있는지 새로운 배열에 저장한 다음에 출력

 

import java.util.Scanner;
import java.util.Arrays;

class Tuple implements Comparable<Tuple> {
    int x,num;

    public Tuple(int x, int num){
        this.x = x;
        this.num = num;
    }

    @Override
    public int compareTo(Tuple tuple){
        return this.x - tuple.x;
    }
}

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();

        Tuple[] tupleArray = new Tuple[n];

        for(int i = 0; i < n; i++){
            tupleArray[i] = new Tuple(sc.nextInt(), i+1);
        }

        Arrays.sort(tupleArray);

        int[] answer = new int[n+1];

        for(int i = 0; i < n; i++){
            answer[tupleArray[i].num] = i+1;
        }

        for(int i = 1; i < n+1; i++){
            System.out.print(answer[i] + " ");
        }

        
    }
}

 

 

자바는 클래스를 정의하기가 쉬워서..??? 파이썬과는 다르게

 

필요하다고 느끼면 원하는 클래스를 직접 정의하여 사용해서 문제를 푼다고 항상 생각해야겠다

TAGS.

Comments