0과1이 나열된 문자열에서 1이 나오면 1점, 1이 연속해서 나오면 추가로 계속 점수를 얻는 문제입니다.
문제를 보고 다음의 두 방법이 떠올랐습니다.
num = int(input())
lst = list(map(int,input().split(' ')))
point = 0 #1이 나오면 포인트가 쌓이고 0이 나오면 해당 포인트를 점수로 변환하게 만들었습니다.
score = 0
for i in range(num):
if lst[i] == 0: #0의 값이 나오면
score += point*(point+1)//2 #지금까지 나온 1을 다 청산합니다.
point = 0 #포인트를 0으로 초기화 해 줍니다.
else:
point +=1 #1의 값이 나오면 포인트를 1 추가합니다.
if i == num-1: #마지막 순간까지 0이 안나오면 임의로 점수에 추가시켜 줍니다.
score += point*(point+1)//2
print(score)
원하는대로 푼 게 아니여서 마음에 들지 않고, 특히 score += point*(point+1)//2
를 두 번 사용한 게 너무 마음에 들지 않았다.
투포인터 구현을 복습하고 와야 겠다는 생각이 들었다.