문자열로 주어지는 수열 중, size
개짜리 부분수열의 각 항목의 곱이 가장 큰 경우를 찾는 문제였다. 큰 틀은 쉬웠는데, 빈 문자열인 경우, size
가 0이거나 음수인 경우 등 몇 가지 예외 상황을 처리해야 하는 것이 조금 까다로웠다.
defmodule Series do
@doc """
Finds the largest product of a given number of consecutive numbers in a given string of numbers.
"""
@spec largest_product(String.t(), non_neg_integer) :: non_neg_integer
def largest_product(_, 0), do: 1
def largest_product(number_string, size) do
if String.length(number_string) < size or size < 0 do
raise ArgumentError
end
number_string
|> String.to_integer()
|> Integer.digits()
|> Enum.chunk_every(size, 1, :discard)
|> Enum.max_by(&Enum.product/1, &>=/2, fn -> [0] end)
|> Enum.product()
end
end
'호두나무 공방 > Exercism in Elixir' 카테고리의 다른 글
Pascals Triangle - Exercism in Elixir (0) | 2022.07.29 |
---|---|
Killer Sudoku Helper - Exercism in Elixir (0) | 2022.07.28 |
Allergies - Exercism in Elixir (0) | 2022.07.26 |
Isogram - Exercism in Elixir (0) | 2022.07.25 |
Perfect Numbers - Exercism in Elixir (0) | 2022.07.22 |