Language/Dart

[Exercism] Word Count

paran21 2022. 8. 31. 00:07

https://exercism.org/tracks/dart/exercises/word-count

 

Word Count in Dart on Exercism

Can you solve Word Count in Dart? Improve your Dart skills with support from our world-class team of mentors.

exercism.org

문제는 주어진 문장 안에서 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