ABOUT ME

구르미의 개발 블로그입니다. 개발, Devops 관련 포스팅을 주로 다루고 있습니다.

Today
Yesterday
Total
  • [프로그래머스 1단계] 알고리즘 4. 가장 작은 수 제거하기
    24년 11월 이전/레거시-알고리즘(3) 2018. 2. 13. 00:17
    반응형

    문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)




    알고리즘 4. 가장 작은 수 제거하기. 주어진 리스트에서 가장 작은수를 제거하시오


    def rm_small(mylist):

        # 함수를 완성하세요

        return ''



    # 아래는 테스트로 출력해 보기 위한 코드입니다.

    my_list = [4, 3, 2, 1]

    print("결과 {} ".format(rm_small(my_list)))




    풀이 : 이번에는 파이썬을 이용하여 이 문제를 풀어보자. 사실 이 문제의 답은 쉽다. 순서는 다음과 같다.


    1. 가장 작은 수를 찾는다.

    2. 가장 작은 수와 같은 수는 모두 제거한다.


    그렇다면 코드는 이렇게 작성할 수 있을 것이다.


    def rm_small(mylist):

    min = min(mylist)  #파이썬은 내장 함수로 리스트의 최소값을 찾는 메소드를 제공한다.

    for i in mylist:

        if min == i:

            mylist.remove(i)


    이 쉬운 문제를 왜 난 올렸을까? 이 코드는 기본적으로 파이썬이 지향하지 않는 코드이다. 그들 말에 빗대면 파이써닉하지 않은 코드이다. 파이썬은 코드를 간결하고 보기 쉽게 짜야한다는 그들의 철학이 있다. 그들의 철학을 코드로 녹여내기 위해 그들은 다양한 문법을 지원하는데 그 중 하나가 for 컴프리헨션이다. 그것을 이용한 코드는 다음과 같다.


    def rm_small(mylist):

        return [i for i in mylist if i > min(mylist)]


    사실, C++, Java를 주로 이용하는 사람들에게는 낯선 코드일 것이다.(물론 파이썬은 이제 기본 언어기 때문에 과연 낯설까는 의문입니다만...) 이 코드를 해석해보자면


    [] -> 리스트로 만들어라 


    for i in mylist     -> mylist 순회 ->내 리스트를 돌아라

    if i > min(mylist) -> 순회 조건   -> 리스트에서 가장 작은 수보다 큰 i만을



    즉 i for i in mylist if i > min(mylist)는 내 리스트를 순회하되 가장 작은 수보다 큰 i만을 요소로 뽑아내라 라는 코드이다. 그 뽑은 요소들을 [] 연산자를 통해 다시 리스트로 만들었다. 즉 가장 작은 수가 제거된 리스트를 만든 것이다. 가끔씩 파이썬 코드를 보면 놀라운 코드들이 많다. 보기 쉬우면서도 멋있는 코드들이 말이다. 여러분들도 재밌을 것 같아서 한 번 가져와보았다. 다음은 나의 코드 전문이다.




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



    728x90
Designed by Tistory.