More actions
imported>Unknown No edit summary |
(Repair batch-0003 pages from live compare) |
||
| Line 5: | Line 5: | ||
== 1차 버전 == | == 1차 버전 == | ||
def toInt(aList): return | def toInt(aList): return [{'O':1,'X':0}[v] for v in aList] | ||
def ox(aList): | def ox(aList): | ||
for idx in range(1,len(aList)): | for idx in range(1,len(aList)): | ||
aList | aList[idx]=aList[idx]*(aList[idx-1]+1) | ||
return sum(aList) | return sum(aList) | ||
| Line 17: | Line 17: | ||
f(n) 에 대해서 sum(f(n)) = n(n+1)/2 이므로, 이를 이용하면 되리라 생각이 듬. 결국 해결. | f(n) 에 대해서 sum(f(n)) = n(n+1)/2 이므로, 이를 이용하면 되리라 생각이 듬. 결국 해결. | ||
def ox(aList): return sum((len(e)*(len(e)+1))/2 for e in aList.split("X") if e!='') | def ox(aList): return sum((len(e)*(len(e)+1))/2 for e in aList.split("X") if e!='') | ||
for each in | for each in ['OOXXOXXOOO','OOXXOOXXOO', 'OXOXOXOXOXOXOX', 'OOOOOOOOOO','OOOOXOOOOXOOOOX']: print ox(each) | ||
---- | ---- | ||
| Line 25: | Line 25: | ||
J언어로 해봤다. | J언어로 해봤다. | ||
[:+/[:-:@(#*1+#);._1 'X',] | |||
--JuNe | --JuNe | ||
Revision as of 00:29, 27 March 2026
See Also 프로그래밍/Score
접근법
1줄로 표현할 방법을 이리저리 고민.
1차 버전
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 이므로, 이를 이용하면 되리라 생각이 듬. 결국 해결.
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