-
[프로그래머스 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'레거시 > 레거시-알고리즘(3)' 카테고리의 다른 글
[프로그래머스 1단계] 알고리즘 6. 같은 숫자는 싫어! (0) 2018.02.21 [프로그래머스 1단계] 알고리즘 5. 행렬 합 (0) 2018.02.20 [프로그래머스 1단계] 알고리즘 3. 피보나츠 수열 (0) 2018.02.12 [프로그래머스 1단계] 알고리즘 2. 최대값과 최소값 (0) 2018.02.12 [프로그래머스 1단계] 알고리즘 1. 최대공약수 최소공배수 구하기 (0) 2018.02.05