백준 2018

yellowsubmarine372·2023년 9월 6일
0

백준

목록 보기
36/38

<연속된 자연수의 합 구하기>

난이도 : 실버 5

  1. 백준 문제
    2018

  2. 코드 알고리즘

  • 투 포인터
  1. 코드
import sys
input = sys.stdin.readline

N = int(input())

def find_contin(N):
    start_id = 1
    end_id = 2
    sum = 0
    result = 0
    while start_id < end_id:
        if end_id > N:
            break
        sum = (end_id)*(end_id+1)//2 - (start_id-1)*start_id//2
        if sum == N:
            result += 1
            end_id += 1
        elif sum < N:
            end_id += 1
        else:
            start_id +=1
    return result

if N==1:
    print(1)
else:
    print(find_contin(N)+1)
  1. 코드 후기
  • 리스트가 필요하지 않지만 리스트를 만들어 메모리 초과 발생. index라고 리스트가 반드시 필요하다는 편견 버리기

  • 최대 N의 중간, N//2+1까지만 시행하고 마지막에 +1을 하면 시행횟수를 줄일 수 있다. (최대 중간까지의 연속 합이 N이 될 수 있으므로)
    근데 틀렸다고 떠서 N까지 수행했다. 마지막 +1이 문제가 아니라 중간 범위 처리하는 과정에서 문제가 발생했을 것으로 보인다.
    한번 나중에 보완해 보겠다.

  • 투포인터가 아닌 시그마 공식을 적용해서 풀 수도 있을 것으로 보인다. 시간도 비슷하게 나올 것 같아 sol2로 시도해봐야겠다.

자만하지 말고 조급해하지 말자. 내 실력을 정확히 평가하자,,, 실버 5임에도 난 너무 못 풀었다... 다시 기초부터 차근차근 쌓고 인내심을 기르자
난 너무 인내심이 없다ㅠㅠ

profile
for well-being we need nectar and ambrosia

0개의 댓글