제일 작은 수 제거하기
코드
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
int[] arr2 = arr.clone();
int temp = 0;
if(arr.length > 1){
for(int i=0; i<arr.length; i++){
for(int j=i; j<arr.length; j++){
if(arr[i] < arr[j]){
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
System.out.println(arr[arr.length-1]);
answer = new int[arr.length-1];
int j = 0;
for(int i=0; i<arr.length; i++){
if(arr2[i] != arr[arr.length-1]){
answer[j] = arr2[i];
j++;
}
}
}else{
answer = new int[] {-1};
}
return answer;
}
}
회고
처음에는 [4, 3, 2, 1] 내림차순으로 만들어서 마지막 값을 제거하여 문제를 풀어가려했지만, 문제를 잘못이해한 것 같다. 제일 작은 값을 제거하고 그 배열은 그대로 출력하는 거였는데.. 그래서 처음에 배열을 하나 복사하고 첫 배열을 내림차순으로 만든 후 마지막 값을 가장 작은 값으로 인지하고 복사한 두번째 배열에서 같은 값을 찾아 그 값은 뛰어 넘고 answer에 넣는 식으로 코드를 짰다.
또한 배열을 복사할 때 깊은 복사와 얕은 복사에 대해 생각하게 되었다. 처음에는 int arr2[] = arr로 하여 주소만 복사되어 변경되는 값이 그대로 arr2에 적용되었다. 배열의 초기값만 복사되고 변경이후의 값은 별개로 하려면 깊은복사를 해야하는데 이때 clone()을 써야한다.
이코드는 그닥 좋은 코드는 아닌거 같다. 다른 사람이 짠 코드를 보며 공부를 해야할 것 같다.
+ 다른 사람의 풀이
'TIL' 카테고리의 다른 글
240516 TIL (0) | 2024.05.16 |
---|---|
240514 TIL (0) | 2024.05.14 |
240509 TIL (0) | 2024.05.10 |
240508 TIL (0) | 2024.05.08 |
240507 TIL (0) | 2024.05.08 |