본문 바로가기

Julia

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

우박수를 찾는 문제이다. 주어진 정수 n에 대해서 1까지 이르는 단계를 세는 함수를 만들고 1백만 이하에 대해서 모두 시행하여 가장 큰 값이 나오는 값을 찾으면 된다. (우박수열길이, 값)의 튜플을 생성하고 가장 큰 값을 찾으면 간단하다. 다른 언어에서는 속도를 높이기 위해서 메모이제이션 등의 기법을 동원했는데, 줄리아는 그런 거 필요 없고 그냥 돌려도 빠르게 계산된다.

function h(n)
    c = 1
    while n > 1
        n, c = iseven(n) ? n ÷ 2 : 3n + 1, c + 1
    end
    return c
end

@time [(h(x), x) for x=1:100_0000] |> maximum |> last |> println