재귀 처리를 익히는 기본 문제 중 하나인 괄호 짝 맞추기 문제다. 다 풀고 나서 생각해보니 String.graphemes
로 문자열을 리스트로 만들고 리스트 패턴 매칭을 하는 게 코드상으로는 조금 더 간단했을 것 같은데, 왜인지 바이너리 패턴 매칭을 써야겠다 싶었다. 연습도 되고 좋았다.
defmodule MatchingBrackets do
@doc """
Checks that all the brackets and braces in the string are matched correctly, and nested correctly
"""
@spec check_brackets(String.t()) :: boolean
def check_brackets(str) do
do_check(str, [])
end
defp do_check("", []), do: true
defp do_check("", _), do: false
defp do_check(<<h::utf8, t::binary>>, acc) when <<h>> not in ["(", "{", "[", "]", "}", ")"] do
do_check(t, acc)
end
defp do_check(<<h::utf8, t::binary>>, acc) when <<h>> in ["(", "{", "["] do
do_check(t, [<<h>> | acc])
end
defp do_check(")" <> t, ["(" | acc]), do: do_check(t, acc)
defp do_check("}" <> t, ["{" | acc]), do: do_check(t, acc)
defp do_check("]" <> t, ["[" | acc]), do: do_check(t, acc)
defp do_check(_, _), do: false
end
'호두나무 공방 > Exercism in Elixir' 카테고리의 다른 글
Perfect Numbers - Exercism in Elixir (0) | 2022.07.22 |
---|---|
Prime Factors - Exercism in Elixir (0) | 2022.07.21 |
House - Exercism in Elixir (0) | 2022.07.19 |
ISBN Verifier - Exercism in Elixir (0) | 2022.07.18 |
Grains - Exercism in Elixir (0) | 2022.07.14 |