코딩문제 풀기(C) - 33 (쉽게 푸는 문제)

Alope·2024년 7월 12일
0
post-thumbnail

안녕하세요!

33번째 문제입니다.

이번 글 역시 푸는 방식은 동일합니다!
1. 문제선택 및 설명
2. 문제접근 (알고리즘)
3. 문제풀기 (코딩하기)
4. 성공 (실패 시 2번)

1. 문제설명

이번 문제 역시 백준에 있는 문제를 풀어볼 계획입니다.
https://www.acmicpc.net/problem/1292 - 문제링크

문제설명 - 쉽게 푸는 문제

문제

동호는 내년에 초등학교를 입학한다. 그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다.

이 문제는 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 것이다.

하지만 동호는 현재 더 어려운 문제를 푸느라 바쁘기에 우리가 동호를 도와주자.

입력

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

출력

첫 줄에 구간에 속하는 숫자의 합을 출력한다.

즉, 숫자를 나열하는데 각 숫자만큼 반복하면서 나열을 한 후, 특정 구간이 주어지면, 그 구간안에 있는 숫자의 합을 구하는 문제입니다.

2. 문제접근 (알고리즘)

a. 구간을 입력받는다
b. 마지막 구간까지 for문(or while문) 실행 (초반구간부터는 시작 x)
c. for문 안에서 1은 1회 2는 2회 3은 3회 이런식으로 이중 for문
d. 구간 내에 있을 때에 숫자를 다 더한 후 출력

3. 문제풀기

(코딩하고 오겠습니다...) - 14분

#include <stdio.h>
#include <string.h>

int main(void) {

    int start, end;
    int current = 1;
    int total = 0;

    scanf("%d %d", &start, &end);

    for(int i=1; i<=end;  i++){
        for(int j=1; j<=i; j++){
            if(current >= start && current <= end){
                total+=i;
            }
            current++;
        }
    }

    printf("%d\n", total);

    return 0;
}

최종결과입니다.

current라는 변수도 하나 넣어줬는데, 이유는 현재가 몇번째 인지 카운트할 숫자가 없어서 그랬습니다!
처음에는 for문 대신 while문을 할려 했는데, 결국은 숫자를 더해야 해서, for문이 필요로 하더라구요. 물론 while문으로도 할 수 있겠지만. 저는 for문이 더 효율적이라 판단해서 for문으로 풀었습니다.

다행히 한번에 통과됐습니다!

https://github.com/hjalope
제 깃헙링크입니다:)

감사합니다!

profile
성장하는 컴공생

0개의 댓글