본문 바로가기
알고리즘 이전/정렬, 이분검색, 결정알고리즘

장난꾸러기

by hoshi03 2023. 8. 13.

철수네 반에는 N명의 학생들이 있습니다.

선생님은 반 학생들에게 반 번호를 정해 주기 위해 운동장에 반 학생들을 키가 가장 작은 학생부터 일렬로 키순으로 세웠습니다.

제일 앞에 가장 작은 학생부터 반 번호를 1번부터 N번까지 부여합니다. 철수는 짝꿍보다 키가 큽니다.

그런데 철수가 앞 번호를 받고 싶어 짝꿍과 자리를 바꿨습니다.

선생님은 이 사실을 모르고 학생들에게 서있는 순서대로 번호를 부여했습니다.

철수와 짝꿍이 자리를 바꾼 반 학생들의 일렬로 서있는 키 정보가 주어질 때 철수가 받은 번호와 철수 짝꿍이 받은 번호를

차례로 출력하는 프로그램을 작성하세요.

 

오름차순으로 정렬된 배열인데 값 2개가 바뀌어있다

배열을 복사한 후 원래 배열과 복사한 배열의 값을 비교해서 바뀐 것이 나오면 그 인덱스를 출력하면 된다

깊은 복사를 하기 위해서 clone 메서드를 이용해  int[] arr2 = arr1.clone(); 형태로 배열을 깊은 복사할 수 있다.

 

import java.util.*;
import java.io.*;

class Main {

    public ArrayList<Integer> solution(int n, int[] arr){
        ArrayList<Integer> ans = new ArrayList<>();
        int[] arr2 = arr.clone();
        Arrays.sort(arr2);

        for(int i =0; i < n; i++){
            if(arr[i] != arr2[i]) ans.add(i+1);
        }

        return ans;
    }



    public static void main(String[] args) {
            Main t = new Main();
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            int[] arr = new int[n];
            for (int i =0; i <n; i++) arr[i]= in.nextInt();
            for (int x : t.solution(n,arr)) System.out.print(x + " ");

    }
}

'알고리즘 이전 > 정렬, 이분검색, 결정알고리즘' 카테고리의 다른 글

이분검색  (0) 2023.08.13
좌표 정렬  (0) 2023.08.13
중복탐색  (0) 2023.08.13
LRU  (0) 2023.08.13
삽입정렬  (0) 2023.08.13