[ python level 1 ] 제일 작은 수 제거하기

안영우·2021년 3월 31일
0

[ 프로그래머스 ]

목록 보기
10/10
post-thumbnail

📌 제일 작은 수 제거하기

arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수를 완성하라.
단, 리턴하려면 배열이 빈 배열일 경우 [-1]을 리턴하라.


💡 나의 풀이

가장 작은 수를 제거할 때는 다음과 같은 방법이 있다.

  1. sorted함수로 오름차순 / 내림차순으로 정렬한 뒤 맨 앞 / 뒤 원소를 제거하기
  2. min함수로 제일 작은 값을 찾아 해당 원소만 제거(remove)하기

문제에서는 n의 범위가 주어지지 않았지만, 시간복잡도를 고려해서 2번으로 선택했다.
sorted함수의 시간복잡도는 O(NlogN)이고, max/min 함수의 시간복잡도는 O(N)이기 때문이다.

자료구조 별 시간복잡도: 파이썬 공식문서

remove함수는 원소 제거 후 empty면 빈 배열을 반환한다.

다른사람은 comprehension으로 구현했는데 i는 제일 작은 원소보다 큰 값만 리스트로 리턴하게 짰다.
또, return [] or -1의 코드는 True값을 return하게 되어있는데, 이는 빈 배열([])False이고 -1True이기 때문이다.

글을 작성하다가 다시 한번 풀어보니까 가장 작은 값이 중복되는 케이스 ([1, 1, 2, 3])는 내 코드가 틀렸다는것을 알 수 있다. 이때는 다른사람의 코드가 정답이 되므로 예외케이스도 꼭 생각해서 풀어야겠다.

# 내 코드
def solution(arr):
    arr.remove(min(arr))

    if not arr:
        return [-1]
    return arr

# 다른사람의 코드
def solution(arr):
    return [i for i in arr if i > min(arr)] or [-1]
profile
YW_Tech

0개의 댓글