개발하는지호

[정렬] 6. 장난꾸러기

by 개발하는지호

<<풀이>>

 

-나의 풀이-

 

이 문제는 생각하는 건 쉽지만 내가 처음에 떠올린 방식 왼쪽 오른쪽 비교해서 넣는 방법은 잘못된 방법이었다 ㅋㅋ

 

키큰 친구는 잡아내지만 뒤쪽 친구는 큰 친구와 다른 조건이므로, 작은 친구 자신이 아닌 앞 친구의 자리 순번이 출력이 된다.

 

그래서 다른 방법을 찾은 결과

 

우선 brr 배열을 arr 배열 크기와 맞게 하나 만들고 거기에다가 arr 배열을 넣었다.

 

그 다음, arr을 Arrays.sort를 통해  정렬하고 brr과 index = 0 부터 비교하면서 다른 값이 있으면 그 위치의 index 값을 ArrayList에 넣었다.

 

*주의 배열을 옮겨 줄때 흔히 int a = b 또는, String a = b 는 이렇게 옮겨 줄 수 있지만 배열은 arr = brr이 안되고 다시 for문 돌려서 넣어줘야한다는 사실!

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

class Main {
    private ArrayList<Integer> solution(int n, int[] arr) {
        ArrayList<Integer> answer = new ArrayList<>();
        int[] brr = new int[n];
        for(int i = 0; i < n; i++) {
            brr[i] = arr[i];
        }
        Arrays.sort(arr);
        for(int i = 0; i < n; i++) {
            if(arr[i] != brr[i]) answer.add(i + 1);
        }
        return answer;
    }


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

 

-강사님 풀이-

 

우선 강사님의 풀이는 나랑 비슷하지만 !! 엄청 큰 다른 점이 있었따 !!

 

바로 배열의 메소드 중 하나인 clone() 메서드 이다. ㅋㅋ

 

이를 활용하면 굳이 나처럼 for문 돌려서 넣어줄 필요가 없고 그냥 

 

int[] brr = arr.clone(); 해주면 끝이난다 ㅎㅎ.. 그렇게 하면 brr 배열은 arr의 배열을 메모리상에서 참조하게 된다 !!

 

*만약 int[] brr = new int[] 해주고 난 뒤에 brr = arr.clone()을 했다면 자바에서는 더 이상 필요 없어진 객체들을 자동으로 정리하는 가비지 컬렉터가 이를 처리한다.

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

class Main {
    private ArrayList<Integer> solution(int n, int[] arr) {
        ArrayList<Integer> answer = new ArrayList<>();
        int[] brr = arr.clone();
        Arrays.sort(arr);
        for(int i = 0; i < n; i++) {
            if(arr[i] != brr[i]) answer.add(i + 1);
        }
        return answer;
    }


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

 

아무리 간단해도 ㅋㅋ 항상 배워간다 ㅎㅎ

'코딩테스트' 카테고리의 다른 글

[정렬] 8. 이분검색  (0) 2024.01.20
[정렬] 7. 좌표 정렬  (0) 2024.01.20
[정렬] 5. 중복 확인  (0) 2024.01.18
[인프런_정렬] 4. Least Recently Used  (0) 2024.01.18
[인프런_삽입 정렬] 3. 삽입 정렬  (0) 2024.01.16

블로그의 정보

DevSecOps

개발하는지호

활동하기