Skills/Algorithm
[프로그래머스] 12935번: 제일 작은 수 제거하기 (JAVA)
개발자 윤구나
2023. 8. 9. 15:55
class Solution {
public int[] solution(int[] arr) { // arr input
// 리턴하려는 배열이 빈 배열인 경우 -> 배열 내부에 원소가 1개만 있다면,
// 가장 작은 수를 제거했을 경우 갯수가? 0개다. 빈 배열이 된다.
// arr은 길이가 1 이상인 배열
if (arr.length == 1) { // 전달받은 arr의 길이가 1이라면
// 빈 배열이 될 예정이기 때문에
return new int[] {-1};
}
// 가장 작은 수를 찾아서, 제외 해줘야 한다.
// 가장 작은 수를 찾아보자
int min = Integer.MAX_VALUE; // int 중에서 가장 큰 값
for (int num : arr) {
// min과 num을 최초로 비교하면 -> num
// System.out.println(num);
System.out.println(min + " " + num);
// num이 더 작을 때 min에 할당해줘야 함
if (min > num) { // 직전까지의 최소값이 num보다 크다면
min = num; // num을 min에 할당(대입)
}
}
System.out.println("최소값 : " + min);
int[] newArr = new int[arr.length - 1]; // 가장 작은 수(1개)를 뺀 배열
// 다시 한 번 for문 돌림
int index = 0; // 새로운 배열의 원소 할당을 위한 인덱스
for (int a : arr) {
System.out.println(index + " " + a);
if (a == min) {
System.out.println(a + "는 최소값이다.");
// 최소값일 경우에는 index++이 작동하지 않아서
// 해당 인덱스는 다음에 다시 사용되게 됨
} else {
newArr[index++] = a; // 값을 할당하고 나서 index++
}
}
// int[] answer = {};
// return answer;
return newArr;
}
}
import java.util.*;
class Solution {
// ArrayList
public int[] solution(int[] arr) {
if (arr.length == 1) {
return new int[] {-1};
}
// 가장 작은 수 비교해주기 위해서 integer 가장 큰 값
int min = Integer.MAX_VALUE;
// 배열 -> 리스트로 변환
// 리스트는 배열과 비슷한데 add, remove 같은 걸로 삭제/추가가 가능한 자료형
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
// 리스트에다가 추가해줘야 함
list.add(arr[i]); // 리스트에다가 기존의 배열 원소를 넣고
// add로 원소를 맨 끝에 '추가'
if (min > arr[i]) {
min = arr[i];
}
}
// 첫 번째 풀이랑 같고, 변환 코드만 좀 들어간 것임.
// 리스트에서 특정한 값(value)의 인덱스를 찾는 메서드
// -> min값으로 index 찾고
// System.out.println(list.indexOf(min)); // 최소값의 인덱스
list.remove(list.indexOf(min)); // 인덱스를 통해서 값을 '제거'
int[] newArr = new int[list.size()]; // size를 통해서 길이(length)
for (int i = 0; i < newArr.length; i++) {
newArr[i] = list.get(i); // list.get(인덱스 값을 조회함)
}
return newArr;
}
}