[백준] 1292 쉽게 푸는 문제 JAVA

·2024년 3월 3일

1일1백준 -Java-

목록 보기
9/60

문제

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

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

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

입력

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

출력

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

예제 입력

3 7

예제 출력

15

내가 했던 풀이 방법

  1. 1부터 last까지의 for문을 돌린다. (왜 last까지냐고 한다면... 현재 코드에서 이용할 수 있는 변수 중에 last가 제일 확실하기 때문에? 여러 예제를 생각해보면 알겠지만, n을 n번씩 쓰기 때문에 last 이상의 수를 쓰지 않는다는 걸 알 수 있음!)

  2. 1부터 숫자를 증가시켜가는데 1번 for문의 i값만큼씩 반복해준다. (1, 2, 2, 3, 3, 3...)

  3. 숫자를 한 번 추가할 때마다 count를 증가시켜준다. (2번 for문이 돌아가는 횟수)

  4. count가 구간의 시작을 나타내는 숫자 이상일 때 sum에 값을 더해준다.

  5. 만약 count가 마지막 구간보다 커지면 for문을 탈출해준다. 이때 for문 탈출은 두 번해줘야 의미없이 for문이 돌아가지 않는다.

  6. sum을 출력한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
        public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");

        int first = Integer.parseInt(input[0]);
        int last = Integer.parseInt(input[1]);
        
        int sum = 0;
        int count = 1;
        for(int i=1; i<=last; i++) {
            for(int j=1; j<=i; j++) {
                if(count>=first) {
                    sum = sum + i;
                }
                count++;
                if(count>last) break;
            }
            if(count>last) break;
        }
        System.out.print(sum);
    }
}

회고

문제를 처음에 읽고 쉽지만은 않겠구나 했는데 의외로 단순하게 풀렸던 문제. 정말 문제 그대로 쉽게 푸는 문제였다.

profile
Frontend🍓

0개의 댓글