본문 바로가기

Julia

오일러 프로젝트 15번 (Julia)

가로 3, 세로 2인 격자를 지나는 경로에서 모든 가로방향 선분을 h, 세로 방향 선분을 v라하면, 가능한 모든 경로는 h 3개와 v 2개로 이루어진 순열이된다. 예를 들어 hhhvv, hvhvh 등으로 표기할 수 있는 것이다. h끼리, v끼리는 순서가 없으므로 이 때 경로의 개수는 5!/(3! * 2!) 이 된다.

가로 20, 세로 20인 경우에는 40!/20!/20! 을 계산하면 된다. 정수를 큰 수로 변환하는 big()과 팩토리얼을 구하는 factorial()을 합성하고, 나눗셈으로 리듀스하면 된다.

참고로 큰수를 정수형식으로 표시하기 위해서는 Integer()로 정수로 다시 변환해주는 과정이 필요하다.

@time let f = factorial ∘ big
    reduce(/, [40, 20, 20] .|> f) |> Integer |> println
end