설명
제일 앞에 가장 작은 학생부터 키순으로 번호를 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());
'Algorithm' 카테고리의 다른 글
[Algorithm] DFS(부분집합 구하기) (0) | 2021.07.10 |
---|---|
[Algorithm] 재귀함수 기본(팩토리얼, 피보나치수열) (0) | 2021.07.10 |
[Algorithm] 이분탐색(이분검색) (0) | 2021.07.07 |
[Algorithm] 좌표정렬(Comparable, compareTo) (0) | 2021.07.07 |
[Algorithm] 중복 확인(Stack, HashMap, Array) (0) | 2021.07.06 |