컴공댕이 공부일지

[c언어] 백준 (1292 쉽게 푸는 문제) 💥💦 본문

문제 풀이/코딩 문제 풀이 모음

[c언어] 백준 (1292 쉽게 푸는 문제) 💥💦

은솜솜솜 2023. 3. 13. 22:02
728x90

백준 1292번

쉽게 푸는 문제 

브론즈 1

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

 

1292번: 쉽게 푸는 문제

첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.

www.acmicpc.net

 

 

경우를 나누느라 꽤나 오래 걸려따... 그치만 해결!

#include <stdio.h>

int main()
{
    int A=0;
    int B=0;
    
    scanf("%d %d", &A, &B);
    int a=A-1;
    int b=B-1;
    
    int nSum=0;
    int mSum=0;
    int n=0;
    int x=0;
    int y=0;
    int res=0;
    
    
    while(nSum<=a) {
        n++;
        nSum=(n*(n+1))/2;
    }
    
    
    int m=n-1;
    
    while(mSum<=b) {
        m++;
        mSum=(m*(m+1))/2;
    }
    
    mSum-=m; //mSum은 범위 안의 것을 구해야하는데 b 다음의 합이 구해지므로 한 번 빼주기~
    m--;
    
    if(a==b) { //구간 안의 수가 1개일 때
        res=n;
        } else if(nSum>mSum){ //구간 안에 한 종류의 수만 있을 때
        x=b+1-a;
        res+=x*n;
    }else { //구간 안에 여러 종류의 수들이 있을 때
        x=nSum-a;
        y=(b+1)-mSum;
        
        res+=x*n;
        res+=y*(m+1);
        
        if(m-n>=1) {
            for(int i=1; i<=m-n; i++) {
                res+=(n+i)*(n+i);
            }
        }
    }
    
    
    printf("%d", res);

    return 0;
}

 

 

 

탭으로 풀이를 정리해보았다.

 

 

 

#초기 셋팅. 변수들의 의미.

초기 셋팅. 변수들의 의미.

 

 

 

#본격 코드 해설.

 

 

 

 

브론즈에 낑낑대는 나란 감쟈...... 화이팅하쟈.....

스트릭 1일차... ㅋㅋㅋ EC.crew 이번 기수도 파이팅!!

 

 

 

 

+) 문제 풀기 위한 나의 사투... 지금 보면 꽤나 간단한 문제인데 왤케 낑낑거린건지....

728x90
Comments