JavaScript에서 map, filter, reduce 함수를 집중적으로 배우면서 파이썬에서의 람다함수도 더 이해하게 된다. 그런 기념으로 reduce 함수를 활용한 파이썬 문제를 풀어보자.
문제 풀이
문제 해석
reduce()
는 배열 각 요소에 대하여 이전에 작업한 결과를 리턴하여 다음 요소를 인수로 작업하는 함수이다.
Task
- 공백으로 나뉘어진 두 숫자가 n번 주어지면, 이들을 분자, 분모로 하는 분수를 모두 곱한 값을 리턴하는
product()
함수를 만들어라.Input Format
- 첫줄은 데이터 숫자인 N, 그 다음엔 N개의 행에 공백으로 구분된 분자와 분모가 온다.
Output Format
- 위의 분수들을 다 곱한 값의 분자와 분모가, input처럼 공백으로 구분된 숫자로 와야한다.
문제 풀이
이미 주어진 코드 해석
1 | from fractions import Fraction |
- 울군선생님이 얘기했던 바 대로 reduce는 람다함수 중에서도 별도로 import를 해줘야 하기 때문에
@from functools import reduce
가 적혀있다. 그리고 분수 처리를 위해 fraction도 import 되어 있다. - 함수에서 결과값을 분자 분모로 나누어 리턴하게끔 처리되어 있다.
- fracs라는 빈 리스트에 n을 인풋으로 받고, 그 이후에 오는 수를 알아서 공백단위로 잘라 만든 분수를 fracs에 append 해준다. 내가 만들어야 하는 건 이 fracs에 담긴 분수들을 곱하기만 하면 되는 함수이다.
코드 작성하기
- 리스트 속 각 요소를 다 곱해서 해커랭크가 준비해준 t라는 변수에 넣는다.
- reduce의 첫 번째 인수로 reduce가 수행할 함수로 각 값을 곱하는 람다함수를 준다.
- reduce의 두 번째 인수로 요소들을 제공할 리스트인 fracs를 넣어준다.
- 세번째 함수인 초기값은 곱셈이니까 1로 준다.
1 | def product(fracs): |
느낀 점
- reduce와 lambda 함수를 드디어 이해한 것 같아 뿌듯하다.
- 영원히 이해못할 줄 알았는데 감개무량.