[프로그래머스_ Java_Lv1] 제일 작은 수 제거하기

박경희·2025년 2월 27일

코딩테스트

목록 보기
62/69

 public static int[] solution(int[] arr) {
 		// 원소가 하나뿐이라면 -1 리턴
        if (arr.length == 1) {
            return new int[]{-1};
        }
		
        // 가장 작은 값 찾기
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
		
        // min이 아닌 값만 새로운 리스트에 담기
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != min) {
                list.add(arr[i]);
            }
        }

		// 리스트를 배열로 변환
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] += list.get(i);
        }

        return answer;
    }

배열만으로 푸는 방법 (List 안 쓰고)

public int[] solution(int[] arr) {
    if (arr.length == 1) return new int[]{-1};

    // 최소값 찾기
    int min = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] < min) {
            min = arr[i];
        }
    }

    // 새로운 배열 생성 (길이 = arr.length - 1)
    int[] answer = new int[arr.length - 1];
    int idx = 0;

    // 최소값을 제외한 나머지를 복사
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] != min) {
            answer[idx++] = arr[i];
        }
    }

    return answer;
}
  • 배열만 사용해서 성능은 빠름

  • 불필요한 컬렉션 사용 안 함 (메모리도 효율적)

  • idx로 직접 answer[]에 순서대로 넣기 때문에 안전하고 명확함


Stream

public int[] solution(int[] arr) {
    if (arr.length == 1) return new int[]{-1};

    int min = Arrays.stream(arr).min().getAsInt();
    return Arrays.stream(arr)
                 .filter(n -> n != min)
                 .toArray();
}

0개의 댓글