문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/181835
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
def solution(arr, k):
if k%2 != 0:
arr = list(map(lambda x:x*k, arr))
else:
arr = list(map(lambda x:x+k, arr))
return arr
# return list(map(lambda x:x+k, arr)) if k%2 else list(map(lambda x:x*k, arr))
문제는 쉬운 문제였다. 처음에는 numpy 배열을 사용해 풀어볼까 싶었지만,
그렇게하면 결과에서 다시 numpy -> list 로 바꿔야하는 불편함이 있으므로, 친구의 의견을 받아들여 다른 방법으로 풀어봤다!
map 함수와 lambda 함수의 조합
3.5 람다(lambda)
오늘은 람다 형식과 그것을 이용하는 여러 가지 함수들에 대해서 알아보겠습니다. 당장 완벽하게 소화하실 필요는 없을 것 같구요, 가벼운 마음으로 이런 것이 있다는 정도만 아셔도 되…
wikidocs.net
람다는 함수의 간단한 형식을 의미한다. (익명함수)
예를 들어,
# 두 수를 더하는 함수
def hap(x, y):
return x + y
hap(10, 20)
# 30
##### 람다 형식으로 써보자
(lambda x, y: x+y)(10, 20)
람다함수는 다양하게 활용할 수 있는데..
map( )
map(함수, 리스트)
map은 함수와 리스트를 인자로 받는데, 리스트로부터 원소를 하나씩 꺼내서 함수에 적용시킨다.
list(map(lambda x: x ** 2, range(5)))
# [0, 1, 4, 9, 16]
위와 같이, 원소에 적용할 함수를 첫 인자, 다음 인자에 리스트 범위 혹은 리스트 자체를 너어주면 된다.
reduce( )
reduce(함수, 시퀀스)
reduce 함수의 형식은 위와 같은데, 시퀀스(문자열, 리스트, 튜플)의 원소들을 누적하여 함수에 적용시킨다.
from functools import reduce # 파이썬 3에서는 써줘야한다.
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# 10
즉, 0 + 1 + 2 + 3 + 4를 수행한다는 의미이다!
reduce(lambda x, y: y + x, 'abcde')
# 'edcba'
위의 예제는 y+x를 적용하였으므로, edcba 의 값이 나온다. (참 어렵군^^)
filter( )
filter(함수, 리스트)
filter 함수는 리스트의 원소들을 함수에 적용시켜 결과가 참인 값들로 새로운 리스트를 만들어준다.
# 0부터 9의 리스트 중에서 5보다 작은 것들만 새로운 리스트로 만드는 예제
list(filter(lambda x: x < 5, range(10)))
# [0, 1, 2, 3, 4]
# 0부터 9까지 중 홀수만 돌려줌
list(filter(lambda x: x % 2, range(10)))
# [1, 3, 5, 7, 9]
문제에서의 예시를 확인해보자!
리스트의 모든 원소에 곱셈을 한다고 생각해보자.
(물론 numpy 배열을 사용하면 쉽게 해결할 수 있다. )
1. for문을 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### for문 사용
answer = []
for i in arr:
answer.append(i*3)
print(answer)
# answer = [ i * 3 for i in arr ] 과 같다.
# [3, 6, 9]
2. map과 lambda를 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### map과 lambda 사용
arr = list(map(lambda x:x*3, arr))
# [3, 6, 9]
3. numpy array를 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### numpy 배열 활용
import numpy as np
arr = np.array(arr)
print(arr*3)
# [1 2 3]
# 출력이 numpy array 형식이다.
이처럼 다양한 방법을 통해 리스트 원소 연산을 할 수 있지만,
map과 lambda를 사용하는 방법이 매우 간편하므로, 자주 사용해봐야겠다.
끄읏-!
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 문자열 정수의 합 (0) | 2024.02.05 |
---|---|
[프로그래머스][PYTHON] Lv. 0 수열과 구간 쿼리 1 (0) | 2024.02.03 |
[프로그래머스][PYTHON] Lv. 0 전국 대회 선발 고사 ( + 딕셔너리 설명) (0) | 2024.01.31 |
[프로그래머스][PYTHON] Lv. 0 가까운 1 찾기 (0) | 2024.01.30 |
[프로그래머스][PYTHON] Lv. 0 배열 만들기 1 (0) | 2024.01.30 |