2/25(수) 코드 카타

dev_joo·2026년 2월 25일

코드 카타

배열에 나타난 수 중 가장 작은 수 제거하기

  1. 배열을 탐색해 가장 작은 수와 그 위치를 찾는다.
  2. 원본 배열을 하나 하나 복사하며 1에서 찾은 수라면 스킵한다.
class Solution {
    public int[] solution(int[] arr) {
        if(arr.length == 0 ||
          arr.length == 1 && arr[0] == 10
          ) return new int[] {-1}; // 문제 지정 조건

          
        int min = arr[0];
        int minIdx = 0;
        for(int i = 0; i < arr.length; i++) { // i=1 부터 (min=arr[0])
            int num = arr[i];
            if(min > num) {
                min = num;
                minIdx = i;
            }
        }

        // 가장 작은 수 제거하기
        int[] answer = new int[arr.length-1];
        int answerIdx = 0;
        for(int i = 0; i < arr.length; i++){
            if(i != minIdx) {
                answer[answerIdx] = arr[i];
                answerIdx++;
            }
        }
         return answer;
    }
}

가장 작은 수 제거하기 부분에서
처음에는 answerIdx없이 i를 활용해보려고 했는데 시간이 모자를 것 같았고, 이미 코드도 충분히 길어져서 변수를 따로 빼는 것이 코드 이해에 도움이 될거라 생각해 그대로 완성했다.

answerIdx를 없애려면 아래처럼 기존 배열의 최소값 인덱스 이후에 오는 값을 당겨서 작성하면 된다. 그런데 이러면 인덱스 계산이 추가되어 else분기가 추가되고 직관성이 더 더 떨어진다.

for (int i = 0; i < arr.length; i++) {
            if (i < minIdx) {
                answer[i] = arr[i];
            } else if (i > minIdx) {
                answer[i - 1] = arr[i];
            }
        }

int[] answer;

로 선언만하고 그대로 리턴을 했더니 초기화가 되지 않아서 오류가 났다.
배열을 선언했을 때, 크기를 지정해주는 것을 잊으면 안된다.

stream 구현으로 변경하기

코드가 복잡하면 stream으로 변경하는 것도 좋은 방법일 듯 하다.

최소값 구하기

int min = Arrays.stream(arr).min().getAsInt();

결과 배열

return Arrays.stream(arr)
        .filter(n -> n != min)
        .toArray();
profile
풀스택 연습생. 끈기있는 삽질로 무대에서 화려하게 데뷔할 예정 ❤️🔥

0개의 댓글