[Java] 알고리즘 - 제일 작은 수 제거하기

이해찬·2023년 6월 20일

항해일지

목록 보기
12/35

23.06.20 - D+20, 알고리즘 - 제일 작은 수 제거하기

기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)

1. 개념

  • 최소값 설정
  • 조건문, 반복문과 인덱스값 활용

2. 문제

3. 시도

  1. 입출력 예시를 보고 arr 배열을 내림차순으로 정렬한 뒤, 제일 작은 숫자를 제거 후, 재정렬
  2. 오름차순의 제일 작은 인덱스값을 제거 후, 내림차순 정렬
  3. 컬렉션 ArrayList 활용

    만약 [0]번째 인덱스 값을 제거 하는거였다면, 배열에서도 가능했었다.
    https://hajoung56.tistory.com/103 > 배열로도 가능

📟 입력

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        if(arr.length <= 1){
            return new int[]{-1};
        }
        
        ArrayList<Integer> ay = new ArrayList<Integer>();
        for (int num : arr){
            ay.add(num);
        }
        Collections.sort(ay);
        ay.remove(0);
        Collections.sort(ay, Collections.reverseOrder());
        
        int[] answer = new int[ay.size()];
        for (int i = 0; i<ay.size(); i++){
              answer[i] = ay.get(i);  
            } 
        
        
        return answer;
    }
}

테스트에서 실패&이유

문제의 예시 중 입력 값 [4,3,2,1] > 출력 값 [4,3,2] 내림차순이 아니라,
입력 [4,1,2,3] > 출력 [4,2,3] 차순에 상관없이 최소값을 빼고 정렬하는 문제였다.
그러니까 차순대로 정렬하지 않고 풀이해야 한다.


4. 해결

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        if(arr.length <= 1){
            return new int[]{-1};
        }
        
        int min = Integer.MAX_VALUE;     
            
       for (int i=0; i<arr.length; i++){
           if(min >= arr[i]){
               min = arr[i];
           }
       }

        int[] answer = new int[arr.length-1];
        int index = 0;
            
        for(int i=0; i<arr.length; i++){
            if(arr[i]==min){
                continue;
            }
            answer[index++] = arr[i];
        }
        
        return answer;
    }
}
  1. 배열의 길이가 1보다 크지 않으면 -1
  2. 최소값을 정수의 최대값으로 설정 int min = Integer.MAX_VALUE;
  3. for문에서 최소값이 나올때까지 반복
  4. 2번째 for문에서 arri번재 인덱스값min 이 일치하면 continue로 건너뛰어서
    i++을 한뒤, i의 인덱스 값(min을 제거한 인덱스 값)과 return값의 인덱스를 일치 시키고 정렬

5. 알게 된 점

  • 최소값 설정과 구하기
  • 조건문, 반복문 내에서 continue 활용
  • 인덱스값의 활용
profile
디자인에서 개발자로

0개의 댓글