See Also [프로그래밍/Score] == 접근법 == 1줄로 표현할 방법을 이리저리 고민. == 1차 버전 == {{{~cpp def toInt(aList): return [{'O':1,'X':0}[v] for v in aList] def ox(aList): for idx in range(1,len(aList)): aList[idx]=aList[idx]*(aList[idx-1]+1) return sum(aList) }}} == 2차 버전 == input 에 대해서 여러 방법으로 변형을 시도. 그 중 좋은 아이디어가 떠오름. 각 sub 단위의 "O" 의 갯수를 세고 이에 대해 각 부분별로 f(n) = f(n-1)+1 에 대한 총합 계산을 해주면 되겠다 생각. f(n) 에 대해서 sum(f(n)) = n(n+1)/2 이므로, 이를 이용하면 되리라 생각이 듬. 결국 해결. {{{~cpp def ox(aList): return sum((len(e)*(len(e)+1))/2 for e in aList.split("X") if e!='') for each in ['OOXXOXXOOO','OOXXOOXXOO', 'OXOXOXOXOXOXOX', 'OOOOOOOOOO','OOOOXOOOOXOOOOX']: print ox(each) }}} ---- 위에서 원소가 없을 때 if e!=''로 처리하는데, 없으면 len(e)가 0이 되므로 그냥 일반화해도 될 것이다. 즉 "있다"와 "없다"를 일반화. J언어로 해봤다. {{{ [:+/[:-:@(#*1+#);._1 'X',] }}} --JuNe