프로그래머스 Level 1
🔒 제일 작은 수 제거하기
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
arr | return |
---|---|
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
def solution(arr):
arr.remove(min(arr));
if len(arr) == 0:
arr.append(-1)
return arr
문제를 읽자마자
이건 파이썬이면 금방 해결한다 ❗️❗️❗️
싶어서 파이썬으로 먼저 후딱 풀었다.
배열에서 최소값을 구해주는 min 함수를 이용하여 최소값을 구한 후 remove를 통해 배열에서 삭제한다.
이 때 배열의 길이가 0이라면 배열에 -1을 추가하여준다.
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;
}
}
아이고 이게 무슨 일이람...!!
파이썬과 코드 길이 차이가ㅠㅠㅠ
감자가 자바로 구현할 경우 고려해야할 부분은 이거였다.
- 삭제한 배열의 위치에 뒤에 있는 요소들 땡겨올 것!
( JAVA에서는 배열이 끊기면 더 출력을 안하므로 )- 마지막 요소 삭제
맘같아선 뒷요소들을 땡겨오고 arr을 반환하고 싶었는데 2번때문에 answer 배열을 반환해야했다.
계속 인덱스 오류(배열의 길이가 안맞아서 생기는 오류)가 나길래
answer도 배열의 요소가 하나일 때와 아닐 때 이렇게 두번 선언해야 했다.
파이썬과 자바의 차이란...!
확실히 파이썬이 제공하는 함수가 더 많아서 편리한 것 같다.
파이썬 감도 다시 잡아가는 중!