Algorithm

제일 작은 수 제거하기

Vvish 2017. 9. 27. 15:47

# Programmers 알고리즘


문제 : rm_small함수는 list타입 변수 mylist을 매개변수로 입력받습니다. 

mylist 에서 가장 작은 수를 제거한 리스트를 리턴하고, mylist의 원소가 1개 이하인 경우는 []를 리턴하는 함수를 완성하세요. 


ex) mylist가 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10, 8, 22]면 [10, 22]를 리턴 합니다.


[정리]

1. 위 문제는 파이썬만 지원

2. 중복된 숫자에 대한 처리사항 없음

3. 리스트에 저장된 순서를 변경하지 않고 가장 작은 수만 제거


[예]

O : [4, 3, 1, 2] >> [4, 3, 2]

X : [10, 8 , 22, 1, 0] >> [1, 8, 10, 22]


 Environment : Python


#myself

1
2
3
4
5
6
7
8
9
10
11
12
13
def rm_small(mylist):
    cnt = len(mylist)
    small = mylist[0]
    
    if cnt <= 1:
        mylist = []
    else:
        for i in mylist:
            if small > i:
                    small = i
        
        mylist.remove(small)
    return mylist
cs

+ len() 메서드를 이용하여 리스트 총 개수 확인

+ small 변수에 리스트 첫 번째 값을 대입 (비교값으로 사용하기 위함)

+ 리스트의 값을 i에 대입하고, small과 비교하여 small이 더 클 경우 i 값을 small에 대입

+ remove() 메서드를 이용하여 small 값 삭제

++ 탭(Tab)으로 구문을 구분하기 때문에 신경써야함


#1

1
2
def rm_small(mylist):
    return [i for i in mylist if i > min(mylist)]
cs

+ 프로그래머스 회원들이 리플을 많이단 소스 코드

+ 해당 소스 코드는 중복까지 처리됨

+ min()메소드 활용

+ 문법이 다른 언어에 비해 유연하여 간결해 보임


# mylist = [4, 3, 2, 1]

# 4번 반복

1. if 4 > 1 -> true : [4]

2. if 3 > 1 -> true : [4, 3]

3. if 2 > 1 -> true : [4, 3, 2]

4. if 1 > 1 -> false


5. Result

# return [4, 3, 2]


#2

1
2
3
def rm_small(mylist):
    mylist.pop(mylist.index(min(mylist)))
    return mylist
cs

+ 반복문 없이 min()과 index()메소드를 이용하여 한 번에 가장 작은 수를 pop()하여 리스트에서 제거하는 코드

+ 중복이 없다는 가정하에 제일 깔끔해 보임