접근법 ¶
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 이므로, 이를 이용하면 되리라 생각이 듬. 결국 해결.
----
위에서 원소가 없을 때 if e!=''로 처리하는데, 없으면 len(e)가 0이 되므로 그냥 일반화해도 될 것이다. 즉 "있다"와 "없다"를 일반화.
J언어로 해봤다.
--JuNe
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)
[:+/[:-:@(#*1+#);._1 'X',]