본문으로 바로가기

[BOJ] 1789번 | 수들의 합 (Python3)

category 카테고리 없음 2022. 7. 18. 00:21
728x90

 

 

 

문제 살펴보기

 

나름 고민해서 풀었는데, 다른 사람들은 어떻게 풀었나 보다가 현타가 왔습니다.

고등학교 수학 풀 때 많이 봤던 1부터 n까지의 합계 공식을 이용할 생각을 못했었네요.

 

 

위의 식을 이용하면 훨씬 간단하게 풀 수 있었네요. 문제가 원하는 답변은 개수지, 어떤 수들의 조합이 아닌데 거기에 너무 집중했었나 봅니다. 부끄럽지만 그래도 제 코드는 남겨 놓겠습니다.

 

소스코드

S = int(input())

def Solution(S):
    cumulativeSum = 0
    N = 0
    num = 1
    
    while True:
        cumulativeSum += num
        remainedAMount = S - cumulativeSum
    
        if remainedAMount == 0:
            N += 1
            return N
    
        elif remainedAMount < num:
            while True:
                cumulativeSum -= num
                remainedAMount = S - cumulativeSum
                
                if remainedAMount > num:
                    cumulativeSum += remainedAMount
                    N += 1
                    return N
                
                N -= 1
                num -= 1
                
        N += 1
        num += 1

print(Solution(S))

 

42억까지 범위인 수를 주는데도 통과를 어떻게 했나 신기하네요.

역시 다른 사람들의 코드를 보면서 배우는 점도 많네요.

 

 

 

 

728x90
반응형