본문 바로가기
코드문제풀이/JAVA

[자바] 제일 작은 수 제거하기

by 똥쟁이핑크 2023. 7. 11.

https://school.programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

제한조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 

입출력 예

arr return
[4, 3, 2, 1] [4, 3, 2]
[10] [-1]

 

나의 문제 풀이

1) 먼저, 배열의 원소가 1개일 경우에는 -1을 return 해야하니 if문을 써서 조건식을 만들어 주었다.

2) 제일 작은수가 빠질테니 answer의 배열크기를 새로 지정하였다.

3) 최소값을 배열의 첫번째 수라고 임의 지정하였다.

4) for문과 Math을 사용하여 min 값을 구하였다.

5) index값을 새로 지정하기 위해 idx라는 변수를 만들었다.

6) 새로 for문을 돌고 if 조건식에 배열의 수가 min값과 같으면 for문을 돈다.

7) 같지 않으면 새로 index값을 받으면서 answer에 추가 될수 있도록 하였다.

class Solution {
    public int[] solution(int[] arr) {
        if(arr.length == 1){
            int[] answer = {-1};
            return answer;
        }
        int[] answer = new int[arr.length -1];
        int min = arr[0]; // 배열의 첫번째가 작다는 가정하에 
        
        for(int i = 0; i < arr.length; i++){
            min = Math.min(min, arr[i]);
        }
        
        int idx = 0; // index는 0부터 시작
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == min){
                continue;
            }
            else{
                answer[idx++] = arr[i];
            }
        }
        return answer;
    }
}