[Code Wars] Count Repeats

문제

https://www.codewars.com/kata/598ee7b6ec6cb90dd6000061/solutions/python

나의 풀이

다른 사람의 풀이

  1. Best Practice 1등의 풀이

     from itertools import groupby
     def count_repeats(s):
         return len(s) - len(list(groupby(s)))
    
    • itertools에 groupby는 솔직히 처음보았다.

    • iterable로 부터 conservativecutive 한 key 와 그 그룹을 리턴한다.

            
      In [31]: data = 'aaaabbccdddaaa
          '
      In [32]: temp = groupby(data)
            
      In [33]: for ele in temp:
          ...:     print(list(ele[1]))
          ...:
          ...:
      ['a', 'a', 'a', 'a']
      ['b', 'b']
      ['c', 'c']
      ['d', 'd', 'd']
      ['a', 'a', 'a']
            
            
            
      In [35]: temp = groupby(data)
            
      In [36]: for ele in temp:
          ...:
          ...:     print(list(ele)[0], list(ele)[1])
          ...:
          ...:
      a <itertools._grouper object at 0x10a787d68>
      b <itertools._grouper object at 0x10a760ef0>
      c <itertools._grouper object at 0x10a787d68>
      d <itertools._grouper object at 0x10a760ef0>
      a <itertools._grouper object at 0x10a787f28>
      
  2. 그 외 풀이

     def count_repeats(str):
         return sum(a == b for a, b in zip(str, str[1:]))
    
    • zip을 이용해서, 옆에 있는 값을 비교하는 방법도 있었다
    • 이 방법은 알고 있었는데 활용하지 못하였다.
    • 평소에 consecutive 관련 문제를 풀 때, 위 아래 모두 유용히 쓸 수 있을 것 같다.

회고