호두나무 공방/Exercism in Elixir

Square Root - Exercism in Elixir

2022. 8. 18. 22:01

문제 보기

자연수의 제곱근울 sqrt 함수 없이 구하는 문제였다. 참고용으로 링크된 문서(위키피디아)를 보니 여러 추정법이 있었는데, 막상 테스트 케이스를 보니 전부 숫자가 크지 않은 자연수 제곱근이라 그냥 적당히 구현했다.

defmodule SquareRoot do
  @doc """
  Calculate the integer square root of a positive integer
  """
  @spec calculate(radicand :: pos_integer) :: pos_integer
  def calculate(radicand) do
    case radicand do
      v when v in 1..10_000 ->
        1..100 |> Enum.find(fn a -> a * a == radicand end)
      v when v in 10_000..1_000_000 ->
        100..1_000 |> Enum.find(fn a -> a * a == radicand end)
    end
  end
end