정수를 저장한 배열, 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: 가장 작은 수를 제거해야하니까 정렬을 해주자 ->
sort
,reversed
등
💡 조건 2: 배열이 빈 배열인 경우에 -1 채우기 ->append()
,insert()
등
💡 조건 3: 배열이 빈 배열인 걸 확인하는 경우 ->len(s) > 1
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로 다시 해보겠습니다. 흑흑 😂
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
등의 사용법을 익힐 수 있는 기본 예제였습니다.