7. [Java] 가장 큰 수 찾기- return new int[]{max, idx};
https://school.programmers.co.kr/learn/courses/30/lessons/120899
틀린 코드
import java.util.*;
class Solution {
public int[] solution(int[] array) {
Arrays.sort(array);
int[] answer = new int[2];
answer[0] = array[array.length-1];
answer[1] = array.length-1;
return answer;
}
}
✅ index 계산 잘못됨
- array[array.length-1]는 정렬된 배열에서 최댓값이 맞지만, array.length-1은 최댓값의 원래 인덱스가 아님.
- 배열을 오름차순 정렬해버리면, 원래 배열에서 최댓값의 인덱스는 사라진다.
- 따라서 최댓값을 담을 변수 max, 인덱스를 담을 변수 idx를 선언하고 반복문을 돌려 최댓값과 인덱스를 갱신한 후, 두 변수를 배열로 변환해서 반환한다.
개선한 코드
import java.util.*;
class Solution {
public int[] solution(int[] array) {
int max = array[0];
int idx = 0;
for(int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
idx = i;
}
}
return new int[]{max, idx};
}
}
배열 리터럴을 반환할 때 쓰는 코드
int형 두 개짜리 배열을 직접 생성하고, 그 배열을 메서드의 반환값으로 사용하는 코드이다.
return new int[]{max, idx};
아래와 같이 배열을 만들고 반환하는 코드인데 한 줄로 줄인 것이다.
int[] result = new int[]{max, idx};
return result;
Java에서 return은 값을 반환하기만 하면 되기 때문에, 굳이 int[] result = ...처럼 중간에 변수에 담을 필요가 없다.
배열 리터럴은 선언 없이 쓰면 컴파일 오류가 난다.
int[] a;
a = {1, 2}; // ❌ 컴파일 오류
→ 대신 이렇게 써야 한다.
int[] a = new int[]{1, 2};