본문 바로가기

Python

프로그래머스 - 나누어 떨어지는 숫자 배열

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

해설

def solution(arr, divisor):
    answer = sorted(list(filter(lambda x: x % divisor == 0, arr)))
    
    if len(answer) == 0:
        answer = [-1]
    return answer

 

filter(function, iterable)
  • function: iterable의 매 요소마다 실행할 함수
  • iterable: 필터할 iterable(순회가능한 요소)
    • ex) list, string

filter 메서드를 사용하여 arr 요소를 순회하면서, lambda(람다)함수를 반환값을 기준으로 참인 경우만 반환하도록 구현했다.

 

def solution(arr, divisor):
    answer = sorted([i for i in arr if i % divisor == 0])
    
    if len(answer) == 0:
        answer = [-1]
    return answer

 

filter 메서드 대신 리스트 안에서 직접 if문으로 사용하여 구현할 수도 있다.

 

참고

map(function, iterables)
  • function: iterable의 매 요소마다 실행할 함수
  • iterables: 순회 가능한 요소들
    • 만약 복수의 iterable을 작성한 경우, function 함수에 2번째 인자로 2번째 iterable의 요소가 들어간다.
def myfunc(a, b):
  return a + b

x = list(map(myfunc, ('apple', 'banana', 'cherry'), ('orange', 'lemon', 'pineapple')))
# ['appleorange', 'bananalemon', 'cherrypineapple']