문제

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

설명

생각보다 금방 풀 것 같았는데 많이 걸렸다. 아마 재활 공백 기간이 있었기 때문일지도… 부지런히 계속 해야겠다. 이번문제는 1,2,2,3,3,3,… 형식의 수열에서 입력으로 범위가 주어지면 그 범위 안에 있는 수의 모든 합을 구하는 문제였다. 그런데 코딩할때 입력받은 범위를 활용하는 부분에서 계속 헷갈려서 헤멨다. 가끔씩 잘 안풀릴때는 잠깐 내려놓고 잠깐 쉬었다가 다시 생각해보는 것도 좋은 방법일 것 같다. 일단 이 소스는 start,end변수에 사용자가 합산을 원하는 범위를 입력받아 저장하는 변수, start_range, end_range는 while문을 이용해 1,2,3…의 수열에서 숫자가 바뀌는 경계선을 찾도록 하고 이를 활용하여 tot 변수에 덧셈이 이루어지게 하였으며, end_range의 범위를 찾으면서 덧셈이 같이 이루어졌다. 그리고 맨마지막으로

tot -= … 소스를 이용해 불필요하게 더해진 부분을 제거하여 최종 결과를 내놓도록 하였다. 코딩을 많이 해보는 것도 중요하지만 적게하더라도 꾸준하게 하는게 더 도움이 될것 같다.

코드

#include <stdio.h>

int main() {
    int start,end,tot=0;
    scanf("%d %d",&start,&end);
    
    int add = 1;
    int start_range=0, end_range=0;
    while (start>start_range)
    {
        start_range += add;
        add++;
    }
    tot += (start_range-start+1)*(add-1);
    end_range = start_range;
    while (end > end_range)
    {
        tot += add*add;
        end_range += add;
        add++;
    }
    add--;
    tot -= add * (end_range-end);
    printf("%d\n",tot);
    
    return 0;
}