알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

코딩테스트 연습 - 제일 작은 수 제거하기

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

programmers.co.kr


Think🤔

가지고 있는 배열 중에서 제일 작은 배열을 빼고, 만약에 뺄 때 length가 1이면 -1을 배열에 담아서 리턴해준다.

가장 작은 배열을 찾을 수 있는 방법은 Math.min으로 비교해서 제일 작은 값을 찾던가, 또는

ArrayList에 담아서 sort 정렬을 하고 제일 마지막 값을 뺴도 된다.

 

Math.min으로 비교하고, 그다음 배열을 옮겨주는 과정에서 제일 작은 값을 비교해서 answer에 넣어준다.


Solution✍
import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        // 빈 배열인 경우 -1 리턴
        if(arr.length <= 1){
            int[] answer = {-1};
            return answer;
        }
        
        //하나 뺀 값의 크기
        int[] answer = new int[arr.length-1];
        
        // 제일 작은 수 if문으로도 가능
        int small = arr[0];
        for(int i=0; i<arr.length; i++){
            small = Math.min(small,arr[i]);
        }
        
        // count로 answer은 차례차례 넣어준다
        int count = 0;
        for(int i=0; i<arr.length; i++){
            if(arr[i] == small){
                continue;
            }else{
                answer[count++] = arr[i];
            }
        }
        
        return answer;
    }
}

int count = 0;을 쓰는 이유는

answer[i] = arr[i]를 하게 되면 continue해서 넘어간 배열부분이 있는데

그러면 만약에 중간에 [10,9,8,  ,12,13] 제일 작은 값이 들어가면 이 부분을 그냥 넘어가기 때문이다.

count++;를 뒤에다 적어줘도 상관은 없다.

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        
        if(arr.length <= 1){
            int[] answer = {-1};
            return answer;
        }
        
        int[] answer = new int[arr.length-1];
        
        int small = arr[0];
        for(int i=0; i<arr.length; i++){
            if(arr[i] <= small){
                small = arr[i];
            }
        }
        
        int count = 0;
        for(int i=0; i<arr.length; i++){
            if(arr[i] == small){
                continue;
            }else{
                answer[count] = arr[i];
                count++;
            }
        }
        
        return answer;
    }
}

count++를 따로 두고, Math.min말고 if문 이용


Review🤩
if (arr.length <= 1) 
	return new int[]{ -1 };

if문을 answer에 안담고 return에서 생성과 동시에 보내는 다른 사람의 풀이도 보고 신기했다.

stream으로 한 줄로 짜는 사람도 있는데 스트림은 넘 어려워서 -ㅅ-;;


 

+ Recent posts