[Programmers] - 제일 작은 수 제거하기

오동훈·2021년 3월 15일
0

Programmers

목록 보기
11/64
post-thumbnail

1. Problem 📃

https://programmers.co.kr/learn/courses/30/lessons/12935

이번 문제는, 입력 받은 배열안에서 가장 작은 수를 제거하고 반환하는 문제입니다.

2. Logic 👨‍🏫

  1. 입력 받은 배열의 길이가 1인 경우, 예외 처리
  2. min 값을 탐색
  3. 배열 내 min 값을 제거하고 반환하기

3. Code 💻

1. 내가 푼 코드

def solution(arr):
    temp = []
    if (len(arr) == 1):
        temp.append(-1) # append 메서드 자체는 return값으로 None을 돌려준다.
        return (temp) # 그래서 위의 문장과 한번에 같이 쓰게되면 None값을 리턴하게 된다.
    temp = [int(i) for i in arr] # 형 변환을 해줘야 아래서 int형끼리 비교 가능
    min = 1000
    for i in range(len(temp)):
        if temp[i] < min:
            min = temp[i]
    temp.remove(min)
    return (temp)

2. 다른 분이 푼 코드

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)))

4. Feedback 📚

- 위의 다른 분이 푼 코드에서 사용한 함수들을 한번 살펴 보려고 한다.

4.1 List Comprehension

- 앞선 문제, 자릿수 더하기에서 다뤘던 개념인데 자주 쓰이는 내용이므로 다시 한번 봐보자

PROTOTYPE = [식 for 변수 in 리스트 if 조건식]

>>> a = [i for i in range(10) if i % 2 == 0] # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
>>> a
[0, 2, 4, 6, 8]

List Comprehension 출처

4.2 remove, slice, pop, del

4.2.1 remove

- remove() 함수는 인덱스가 아닌, 값을 입력해 지우는 방식입니다. 만약 지우고자 하는 값이 리스트 내에 2개 이상이 있다면 순서상 가장 앞에 있는 값을 먼저 지우게 됩니다.

a = [1, 2, 1, 3, 4, 5, 1]
a.remove(1) # 인덱스가 아닌 값(Value)

print(a) # [2, 1, 3, 4, 5, 1]

4.2.2 del, pop()

- pop()과 del은 지우고자 하는 리스트의 인덱스를 받아 지우는 방식입니다.
pop()은 지워진 인덱스의 값을 반환하지만 del은 반환하지 않습니다.
이 차이 때문에 미세하게 del이 pop()보다 수행속도가 더 빠릅니다.

ex1). pop()

a = [1, 2, 1, 3, 4, 5, 1]
removed = a.pop(1) # index 삭제

print(a) # [1, 1, 3, 4, 5, 1]
print(removed) # 2
ex2). del

a = [1, 2, 1, 3, 4, 5, 1]
del a[1]

print(a) # [1, 1, 3, 4, 5, 1]
print(a[0]) # 1

4.2.3 slice

- 슬라이싱은 위와 같이 리스트의 값을 지우는 것이 아닌, 사용자가 원하고자 하는 범위를 출력합니다. 즉, 원본 리스트는 그대로 존재하며 원하고자 하는 범위만큼 출력 하기 위해 새로운 리스트가 생성됩니다.

a = [1, 2, 1, 3, 4, 5, 1]
b = a[1:]

print(a) # [1, 2, 1, 3, 4, 5, 1]
print(b) # [2, 1, 3, 4, 5, 1]

C 언어만 사용하다가 파이썬을 사용해서 그런지 직접 어떤 것을 표현해야 되고, 어떤 것이 라이브러리로 제공되어 있는지 아직까지는 정확하게 잘 모르겠다. 지금은 헤매고 있는 단계긴 한데 이렇게 부딪히면서 빨리 알아가는게 지금으로써는 최선의 방법인 것 같다. 그럼 다들 화이팅 :))

profile
삽질의 기록들🐥

0개의 댓글