[Python] 프로그래머스 제일 작은 수 제거하기(lv.1)

미남로그·2021년 11월 13일
0
post-thumbnail

제일 작은 수 제거하기

정수를 저장한 배열, 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]


제가 떠올렸던 아이디어

💡 조건 1: 가장 작은 수를 제거해야하니까 정렬을 해주자 -> sort, reversed
💡 조건 2: 배열이 빈 배열인 경우에 -1 채우기 -> append(), insert()
💡 조건 3: 배열이 빈 배열인 걸 확인하는 경우 -> len(s) > 1

나의 코드

첫 번째 시도(정답 X)

def solution(arr):
    if len(arr) > 1:
        set(arr)
        reversed(arr)
        arr.pop()
        return arr
    else:
        set(arr)
        reversed(arr)
        arr.pop()
        arr.append(-1)
        return arr

이라고 썼는데

네! 이건 그냥 😅 여기에 🗑 넣어줍시다.

set을 쓴 이유는 마지막 제한 사항을 보고 중복된 경우를 없애줘야 하는 줄 알았습니다.

remove랑 insert로 다시 해보겠습니다. 흑흑 😂

두 번째 시도(정답 O)

def solution(arr):
    if len(arr) > 1:
        arr.remove(min(arr))
        return arr
    else:
        arr.remove(min(arr))
        arr.insert(0,-1)
        return arr
        
print(solution([4,3,2,1]))
print(solution([10]))

근데 만약 [3,2,1,1,1] 인 경우에는 1 하나만 지워지잖아요. 그러면 set을 써주는게 맞지 않을까? 생각은 듭니다. test는 그정도로만 해도 통과될 수 있도록 만든 것 같습니다.



다른 사람 풀이

가장 많은 좋아요를 받은 코드를 가져오겠습니다. 그리고 여기서부터는 -1을 넣어줘야 한다는 조건이 없었던 이전 문제이므로 이점을 참고하여 코드를 보시면 좋겠습니다.

def rm_small(mylist):
	return [i for i in mylist if i > min(mylist)]

my_list = [4,3,2,1]
print("결과 {} ".format(rm_small(my_list)))

해당 코드는 리스트 내포를 사용했습니다.

mylist라는 리스트 안에 담긴 것들을 i로 하나씩 나오게 되고, 가장 작은 값을 구하기 위해 i > min(mylist)를 사용했는데 최솟값보다 더 큰 애들은 return 되도록 세웠습니다.

근데 이 코드는 뭔가 직관적으로 와닿지도 않고 for문은 배열의 길이가 길어질수록 엄청 오래 걸린다는 단점이 있습니다.



정답 코드

제 첫 시도처럼 pop을 쓴 다른 코드도 보겠습니다.

def rm_small(mylist):
	mylisft.pop(mylist.index(min(mylist)))
    return mylist

my_list = [4,3,2,1]
print("결과 {} ".format(rm_small(my_list)))

파이썬에서 index 함수는 어떤 용도인가요?

index(x) 함수는 리스트에 x 값이 있으면 x의 위치 값을 돌려주는데요.

그럼 가장 작은 값을 min으로 먼저 찾고, 그 다음에 index로 min 값의 위치를 찾아주고, 이걸 pop() 안에 위치를 넣어줘서 특정 값을 지워주는 함수를 완성했습니다.

pop, index, insert, remove 등의 사용법을 익힐 수 있는 기본 예제였습니다.

profile
미남이 귀엽죠

0개의 댓글