반응형

[처음에 내가 작성한 코드]
import java.util.*;
import java.lang.Math;
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
List<Integer> list = new ArrayList<>();
int min = 0;
if(arr.length <= 1){
answer = new int[1];
answer[0] = -1;
}else{
for(int i=0; i<arr.length; i++){
min = Math.min(arr[i], arr[i]);
list.add(arr[i]);
}
list.remove(Integer.valueOf(min));
answer = new int[list.size()];
for(int j=0; j<list.size(); j++){
answer[j] += list.get(j);
}
}
return answer;
}
}
int min = 0; 으로 설정했을 때
min = Math.min(min, arr[i]); 로 하면 min의 초기화 값인 0으로 출력되어
min = Math.min(arr[i], arr[i]); 로 고쳐서 풀었더니 테스트 실행은 잘되었다.

min = Math.min(arr[i], arr[i]); 로 하면 안되는 이유

arr[i] 끼리 비교하면 최종적으로는 min 값이 맨 마지막 배열에 있는 것이 출력되게 된다.
테스트 코드에서 성공했던 이유는 arr[i]의 마지막 배열에 최솟값이 들어있었기 때문이었다.
해결방안
int min = arr[0]; 으로 초기화해주고, min = Math.min(min, arr[i]); 으로 비교해주면 arr[i] 값 중에서 가장 작은 값을 출력할 수 있게 된다.
[정답 코드]
import java.util.*;
import java.lang.Math;
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
List<Integer> list = new ArrayList<>();
int min = arr[0];
if(arr.length <= 1){
answer = new int[1];
answer[0] = -1;
}else{
for(int i=0; i<arr.length; i++){
min = Math.min(min, arr[i]);
list.add(arr[i]);
}
list.remove(Integer.valueOf(min));
answer = new int[list.size()];
for(int j=0; j<list.size(); j++){
answer[j] += list.get(j);
}
}
return answer;
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 - (JAVA/ 자바) (1) | 2025.04.01 |
---|---|
[프로그래머스] 수박수박수박수박수박수? - (JAVA/ 자바) (2) | 2025.03.30 |
[프로그래머스] 가운데 글자 가져오기 - (JAVA/ 자바) (1) | 2025.03.29 |