ì ‘ê·¼ë²• ¶
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',]










