[프로그래머스 level1] 제일 작은 수 제거하기
문제
정수를 저장한 배열, 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함수 씀
- 빈 배열 처음에 처리하기