[알고리즘] 백준 10986 (파이썬)

wonsik·2022년 4월 21일
1

알고리즘

목록 보기
2/15


처음엔 구간을 0인 것부터 M인 것 까지 for문을 통해서 돌렸는데 TLE가 나왔다.
생각해보면 나누어 떨어지긴 위해선 구간합의 나머지가 같은 부분의 구간을 나누면 된다.

import sys
total, tar = map(int,sys.stdin.readline().split())

tem = list(map(int,sys.stdin.readline().split()))

prepix = [0 for i in range(tar)]
presum = 0

prepix[0] = 1


for i in range(total):
    presum+=tem[i]
    # prepix.append(presum%tar)

    prepix[presum%tar] += 1

# print(prepix)
'''
나머지가 같은 두 부분합을 고르면 두 구간은 결국 tar의 배수가 된다.
나머지가 0인 경우는 부분합 자체가 tar의 배수인 경우이므로 두 구간이 아니라 본인 구간도 될 수 있기 때문에
index가 0인 (부분합 0) 것을 포함
'''
ans=0
for i in prepix:
    ans += i*(i-1)//2

print(ans)

코드는 어렵지 않지만 알고리즘과 로직을 이해하는데 시간이 오래 걸렸다.

profile
새로운 기술을 배우는 것을 좋아하는 엔지니어입니다!

0개의 댓글