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
Retrieved from http://wiki.zeropage.org/wiki.php/Score/1002
last modified 2021-02-07 05:28:00