원본 문제 : https://programmers.co.kr/learn/courses/30/lessons/12935
- 정수가 저장된 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수 만들기
- 빈 배열이면 -1을 반환
- 제한조건 : arr은 길이 1이상인 배열, 인덱스 i,j에 대해 i 가j와 같지 않다면 arr[i]도 arr[j]와 같지 않다.
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
List<Integer> arr2 = new ArrayList<Integer>(); // 배열에서 바로 삭제가 안됨으로 arraylist생성
// 원소가 1개이하면 무조건 가장 작은 수 이므로 제거된다 -> -1을 리턴
if(arr.length <= 1) {
answer = new int[] {-1};
return answer;
}
for(int i=0; i<arr.length; i++) { // 배열원소를 arrayList에 넣어줌
arr2.add(arr[i]);
}
int min = 0; // 가장 작은 원소의 인덱스, 처음에는 무조건 첫 번째 인덱스가 작다고 가정
for(int i=1; i<arr.length; i++) {
if(arr[min] > arr[i]) {
min = i; // min에 가장 작은 값의 인덱스를 넣어줌
}
}
arr2.remove(min); // 해당 인덱스를 가진 원소를 제거
answer = new int[arr2.size()];
for(int i=0; i<arr2.size(); i++) { // 다시 배열에 넣어줌
answer[i] = arr2.get(i);
}
return answer;
}
}
나는 원소 비교 후 가장 작은 값의 인덱스를 저장해 해당 인덱스의 값을 제거하는 방식으로 구현하였다. 그리고 배열에서 바로 삭제하는 메소드가 없어, arrayList를 만들어 옮긴 후 삭제하고 다시 배열에 담았다.
추가적으로 생각해보니 정렬 알고즘을 써서 오름차순 정렬 후 가장 첫 인덱스의 값을 지우거나 뒤에 원소를 앞으로 밀어 return해도 될 것 같다.
다른 블로그들을 찾아보니 collection을 사용해서 풀이하는 방법도 있었다.
'알고리즘' 카테고리의 다른 글
백준1158_요세푸스 문제 (java) (0) | 2021.11.08 |
---|---|
백준1764_듣보잡 (java) (0) | 2021.11.08 |
백준1620_나는야 포켓몬 마스터 이다솜 (java) (0) | 2021.09.30 |
프로그래머스_기능개발 (java) (0) | 2020.09.07 |
프로그래머스_주식가격 (java) (0) | 2020.09.06 |