https://exercism.org/tracks/dart/exercises/word-count
문제는 주어진 문장 안에서 word를 count하는 것이었는데, 이 word를 어떻게 규정하는지와 관련된 여러가지 조건들을 어떻게 코드로 풀어야 하는지 고민이 많았던 문제다.
다음의 세 가지 경우는 word 1개로 볼 수 있다.
각 조건은 정규표현식으로 만들고, map을 통해 해당하는 Iterable<String>을 만들어주었다.
class WordCount {
Map<String, int> countWords(String phrase) {
// 정규표현식으로 조건3 or 조건1,2에 해당하면 Iterable로 만들어 준다.
RegExp exp = RegExp('([a-z0-9]+\'[a-z0-9]+)|[a-z0-9]+');
Iterable<String> words = exp.allMatches(phrase.toLowerCase()).map((x) => x[0]!);
// Iterable을 돌려 word를 count한다.
Map<String, int> _wordCount = {};
for (String word in words) {
if (!_wordCount.containsKey(word)) {
_wordCount[word] = 1;
} else {
_wordCount[word] = _wordCount[word]! + 1;
}
}
return _wordCount;
}
}
정규표현식이 valid를 체크하기에는 좋은데, 이런 조건들이 있을 때 어떤 식으로 써야할 지 고민이 많이 된다.
그런데 community solutions을 보다가 '엇, 이 생각을 왜 못했지'라고 생각했던에 위의 조건이다.
정말 이것저것 복잡하게 생각하지 않고, 문제에 주어진 조건을 그대로 정규표현식으로 표현한 것!
문제의 추가 조건들이 있어서 좀 더 복잡하게 생각했다.
특히 예제에 123'! 이런 경우에는 123만을 조건1에 따라 단어로 count가 되서 모든 특수문자들을 처리해야하는지 고민했던 것 같다.
처음에 내가 접근했던 방법은 '거짓' 조건들을 제외해서 '참'을 찾으려고 했던 것인데,
이 경우에는 문제의 '참' 조건이 비교적 명확하기 때문에 '참'으로 필터하는게 더 좋은 방법인거 같다.
'Language > Dart' 카테고리의 다른 글
[Excercism] Space Age #enum (0) | 2022.09.08 |
---|---|
[Exercism] Bob (0) | 2022.09.08 |
[Exercism] Difference Of Squares (0) | 2022.08.30 |
[Style] no_leading_underscores_for_local_identifiers (0) | 2022.08.19 |
[Exercism] Armstrong Numbers #num #math (0) | 2022.08.19 |