본문 바로가기
프로그래밍/알고리즘 & 자료구조

백준 2018 : 수들의 합 5 with 파이썬

by Play_With 2024. 1. 31.
반응형

https://www.acmicpc.net/problem/2018

 

2018번: 수들의 합 5

어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한

www.acmicpc.net

# 포인트

1. 애매할땐 print()를 하여 구체적인 값을 보고 코드를 수정해주기

n = int(input())
cnt,summ = 0,0
start, end = 1,1

while end<=n:
    if summ == n:
        print(start, end) #프린트를 찍으면 n=15일 경우, end가 15인 경우가 찍히지 않아 항상 cnt가 1개가 모자름
        cnt+=1
        summ-=start
        start += 1
        
    elif summ > n:
        summ -= start
        start += 1

    else:
        summ+=end
        end+=1
    
print(cnt)

 

내 경우에는 #프린트를 찍으면 n=15일 경우, end가 15인 경우가 찍히지 않아 항상 cnt가 1개가 모자르게 나왔다.

그래서 14+15가 남아있는 경우만을 생각해 보니 else: 구문에서 end+=1이 먼저 나오고 그 다음에 summ에 더해줘야 했다. 그러기 위해서는 end의 초기값이 0으로 설정해야 했다. 

n = int(input())
cnt,summ = 0,0
start, end = 1,0

while end<=n:
    if summ == n:
        cnt+=1
        summ-=start
        start += 1
        
    elif summ > n:
        summ -= start
        start += 1

    else:
        end+=1
        summ+=end
     
print(cnt)

 

반응형

댓글