Python/프로그래머스

[프로그래머스 level1] 제일 작은 수 제거하기

묘걍 2023. 8. 27. 16:07

문제

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

<제한 조건>

- arr은 길이가 1 이상인 배열

- 인덱스 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j]

내가 생각한 풀이 방법

가장 작은 수 찾기
for문을 돌면서
min = arr[1]
arr[i] < min 일 경우 min = arr[i]

가장 작은 수를 제외한 배열 만들기
for문을 돌면서 answer에 추가하는데
만약 min과 같은 수가 나오면 continue

 

빈 배열일 경우 -1 리턴

배열의 길이가 1일 경우에는 그 하나의 숫자가 가장 작은 수일거고 그 숫자가 제거될 것. 그러면 빈 배열이 되니 -1을 리턴하라는,,

맨 앞 부분에 len(arr) == 1이면 -1을 리턴 조건을 건다

→ 가장 작은 수 찾고 제거한 배열을 만든 후 배열이 비어 있으면 -1을 추가하라고 한다.

코드로 구현

1차 시도

def solution(arr):
    answer = []
    min = arr[1]
    for i in arr:
        if arr[i] < min:
            min = arr[i]
    for i in arr:
        if i == min:
            continue
        else:
            answer.append(i)
    return answer

- 우선 빈 배열일 경우에 대한 코드를 넣지 않았다

- 배열에서 첫 번째 자리는 0번!! 알고 있었는데 실수했다ㅠㅠ

 

2차 시도

def solution(arr):
    answer = []
    min = arr[0]
    for i in arr:
        if arr[i] < min:
            min = arr[i]
    for i in arr:
        if i == min:
            continue
        else:
            answer.append(i)
    if len(arr) == 0:
        arr.append(-1)
    return answer

- arr의 길이가 0인 것을 찾는 게 아니라 answer가 0인걸 찾아 더해주기

- 이런식으로 min의 초기 값을 설정하면 min의 값이 바뀌지 않고 초기값 그대로라고 함??

 

3차 시도

def solution(arr):
    answer = []
    if len(arr) == 1:
        answer.append(-1)
    min_num = min(arr)
    for i in arr:
        if i == min_num:
            continue
        else:
            answer.append(i)
    return answer

- 제일 작은 수 찾을 때 for 돌지 말고 min함수 씀

- 빈 배열 처음에 처리하기