본문 바로가기
백준

[백준] 1292번 : 쉽게 푸는 문제 – JAVA [자바]

by Hongwoo 2022. 9. 12.
반응형

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

 

1292번: 쉽게 푸는 문제

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1292번 쉽게 푸는 문제는 브론즈 1 난이도의 수학 및 구현 문제이다. 이 문제에서는 입력으로 정수 A와 B가 주어진다. 그리고 이 문제에서는 수열이 있는데 이 수열은 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5.. 이런 식으로 수열을 만든다. 이때, A번째 수부터 B번째 수까지의 합을 구하면 된다.

 

이 문제는 수열을 String형으로 만드는 방식으로 풀었다. 우선, 1부터 B번째 까지를 수열로 만든다. 이것은 이중 loop을 이용해서 한다. int형 변수 count와 j를 1로 초기화해주고 안에 있는 for-loop에서는 int i = 1부터 j까지 j를 수열에 append 시켜준다. 이때 중요한 게 append 할 때 j와 공백을 append 시켜주는 것이다. 이 이유는 나중에 StringTokenizer를 이용해서 이 수열을 쪼갤 것이기 때문이다. 그리고 한번 append 할 때마다 count를 1씩 증가시켜주고 count가 b보다 커지면 loop을 종료시킨다.

 

이렇게 하면 String형으로 모든 수들이 공백으로 나누어져 있는 수열을 가지게 된다. 이제 StringTokenizer를 이용해서 이 수열을 공백을 delimiter로 이용해서 쪼개 준다. 그리고 A번째부터 B번째 까지 더한 후 출력만 해주면 된다.

 

자세한 코드는 아래에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        StringBuilder sb = new StringBuilder();
        int count = 1;
        int j = 1;
        while (count <= b) {
            for (int i = 1; i <= j; i++) {
                sb.append(j + " ");
                count++;
            }
            j++;
        }
        String s = sb.toString();
        st = new StringTokenizer(s);
        int sum = 0;
        for (int i = 1; i < a; i++) {
            st.nextToken();
        }
        for (int i = a; i <= b; i++) {
            sum += Integer.parseInt(st.nextToken());
        }
        System.out.print(sum);
    }
}

 

 

반응형

댓글