백준 code.plus 17427번

강지훈·2022년 5월 6일

https://www.acmicpc.net/problem/17427
처음에 짠 코드
def g(num):
total=0
for i in range(1,num+1):
total+=f(i)

return total

def f(num):
sum=0
for i in range(1,num+1):

    if num%i==0:
        sum+=i
return sum

n=int(input())

print(g(n))

시간초과 오류떠서
구글링으로 좀 참조했는데

참 간편하게 짤수있더라...

n=int(input())
sum=0
for i in range(1,n+1):
sum+=(n//i)*i

print(sum)

이건데 설명해보자면
g(6)=f(1)+f(2)+f(3)+f(4)+f(5)+f(6)이다

{1},{1,2},{1,3},{1,2,4},{1,5},{1,2,3,6}
1은 6개
2는 3개
3은 2개
4는 1개
5는 1개
6은 1개
반복문을 돌아서 (n//i)*i
i가 1이면 1이 나오는 횟수의 합
i가 2이면 2가 나오는 횟수의 합
...
이렇게 sum 에 누적시키면 답이나온다.

profile
never stop

0개의 댓글