csmoon1010의 SW 블로그

[200512] 제일 작은 수 제거하기 - 연습문제(level1) 본문

Coding Test/프로그래머스

[200512] 제일 작은 수 제거하기 - 연습문제(level1)

csmoon1010 2020. 5. 12. 19:44

1. 문제이해

- 정수 배열 arr에서 가장 작은 수를 제거한 answer배열 return

- 단, 빈 배열이 되면 -1을 담아 return

 

2. 전략

- arr.length가 1일 때 : answer배열의 크기를 1로 정하고 -1 담아 return

- arr.length가 1이 아닐 때:

(1) answer 배열 : arr.length-1의 크기
(2) min 찾기 : arr[i]와 arr[min]을 비교하며 최소값 가진 index 찾기
(3) answer에 옮기기 : min이 아닐 때만 옮김. 단, answer배열의 index 증가는 따로 관리.

 

3. 참고사항

- 다른 방법 : stream 이용

생성 : Arrays.stream(arr)
min값 찾기(최종 연산) : min()이용한 후 getAsInt()로 int형으로 변환
최종결과(중개연산 + 최종연산) : filter로 min이 아닌 수들만 stream에 추가 후 toArray()로 배열 변환

4. 코드

class Solution {
    public int[] solution(int[] arr) {
        int[] answer;
        if(arr.length == 1) {
            answer = new int[1];
            answer[0] = -1;
        }
        else{
            answer = new int[arr.length-1];
            int min = 0;
            for(int i = 0; i < arr.length; i++){ //min찾기
                if(arr[i] < arr[min])   min = i;
            }
            int index = 0;
            for(int i= 0; i < arr.length; i++){ //answer에 옮기기
                if(i == min)    continue;
                else    answer[index] = arr[i];
                index++;
            }
        }
        return answer;
    }
}
Comments