[프로그래머스] 제일 작은 수 제거하기-JAVA&Python

말하는 감자·2022년 5월 10일
0

Programmers Level 1

목록 보기
10/66
post-thumbnail

프로그래머스 Level 1

🔒 제일 작은 수 제거하기

📚 문제 설명

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


✅ 제한 조건

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

📖 입출력 예

arrreturn
[4,3,2,1][4,3,2]
[10][-1]

🗝️ Python 작성 코드

def solution(arr):
    arr.remove(min(arr));
    
    if len(arr) == 0:
        arr.append(-1)
    
    return arr

문제를 읽자마자

이건 파이썬이면 금방 해결한다 ❗️❗️❗️

싶어서 파이썬으로 먼저 후딱 풀었다.

배열에서 최소값을 구해주는 min 함수를 이용하여 최소값을 구한 후 remove를 통해 배열에서 삭제한다.

이 때 배열의 길이가 0이라면 배열에 -1을 추가하여준다.


🗝️ JAVA 작성 코드

class Solution {
    public int[] solution(int[] arr) {
    	// 배열의 요소가 하나라면 -1 반환 (최소값 삭제 시 빈 배열)
        if(arr.length == 1) {
            int[] answer = {-1};
            return answer;
        }
        
        // arr 길이보다 하나 작은 answer 배열 생성 (최소값이 삭제될 것이므로)
        int[] answer = new int[arr.length-1];
        int minIdx = 0; // 최소값을 가진 배열 인덱스
        
        // 최소값을 가진 배열 인덱스 탐색
        for(int i=0; i<arr.length; i++) {
            if(arr[minIdx] > arr[i]) minIdx = i;
        }
        
        // 최소값 인덱스부터 뒤 요소들 덮어쓰기 (최소값 삭제)
        for(int i=minIdx+1; i<arr.length; i++) {
            arr[i-1] = arr[i];
        }
        
        // answer 배열에 넣어주기
        for(int i=0; i<arr.length-1; i++) {
            answer[i] = arr[i];
        }
        
        return answer;
    }
}

아이고 이게 무슨 일이람...!!
파이썬과 코드 길이 차이가ㅠㅠㅠ

감자가 자바로 구현할 경우 고려해야할 부분은 이거였다.

  1. 삭제한 배열의 위치에 뒤에 있는 요소들 땡겨올 것!
    ( JAVA에서는 배열이 끊기면 더 출력을 안하므로 )
  2. 마지막 요소 삭제

맘같아선 뒷요소들을 땡겨오고 arr을 반환하고 싶었는데 2번때문에 answer 배열을 반환해야했다.

계속 인덱스 오류(배열의 길이가 안맞아서 생기는 오류)가 나길래
answer도 배열의 요소가 하나일 때와 아닐 때 이렇게 두번 선언해야 했다.


😬 느낀 점

파이썬과 자바의 차이란...!

확실히 파이썬이 제공하는 함수가 더 많아서 편리한 것 같다.

파이썬 감도 다시 잡아가는 중!

profile
나는 말하는 감자다

0개의 댓글