[정렬] 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
개발하는지호