Algorithm

[Algorithm] 배열 비교(clone, sort 활용)

cornarong 2021. 7. 6. 22:23

설명

제일 앞에 가장 작은 학생부터 키순으로 번호를 1번부터 N번까지 부여합니다.

철수는 짝꿍보다 키가 큽니다.

철수가 짝꿍과 자리를 바꿨습니다.

자리를 바꾼 학생들의 일렬로 서있는 키 정보가 주어질 때

철수가 번호와 짝꿍의 번호차례로 출력하는 프로그램을 작성하세요.

 

입력

첫 번째 줄에 자연수 N(5<=N<=100)이 주어진다.

두 번째 줄에 제일 앞에부터 일렬로 서있는 학생들의 키가 주어진다.

키(높이) 값 H는 (120<=H<=180)의 자연수 입니다.

 

출력

첫 번째 줄에 철수의 번호와 짝꿍의 번호를 차례로 출력합니다.

 

예시 입력 / 출력

6
120 130 150 150 130 150
3 5

* 오름차순으로 정렬된 배열에서 서로가 뒤바뀐 자연수를 찾는 문제.

 

 

입력.

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        Solution(n, arr);
    }

 

풀이.

1. clone을 통해 깊은 복제(원본 객체의 필드값과 동일한 값을 가지는 새로운 객체)한다. - 원본객체 보호

2. 복제 배열을 sort로 정렬하여 원본과 비교한다.

    static void Solution(int n, int[] arr){

        int[] arr2 = arr.clone();
        Arrays.sort(arr2);
        ArrayList<Integer> result = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            if(arr[i] != arr2[i]) result.add(i+1);
        }
        for(int x : result) System.out.printf(x+" ");
    }

정리 : 

배열의 깊은복제 : arr.clone();

배열의 오름차순 : Arrays.sort(arr);

배열의 내림차순 : Arrays.sort(arr, Collections.reverseOrder());