백준 온라인 저지/Silver

[BOJ] 1292 - 쉽게 푸는 문제

jooona 2021. 2. 12. 22:36
반응형

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다.

 

문제 설명

www.acmicpc.net/problem/1292

 

1292번: 쉽게 푸는 문제

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

www.acmicpc.net

난이도: 실버 4

사용언어: JAVA

 

우선 1이 한 번, 2는 두 번, 3은 세 번... 반복되는 수열을 만듭니다. 이를테면 122333444455555666666... 과 같은 형태이죠. 여기서 A와 B가 주어지면 수열에서 A에서부터 B까지의 합을 구하는 문제입니다.

 

풀이

저는 B 크기의 배열을 하나 만들어 배열의 각 원소에 해당 번호까지의 합을 저장했습니다. 즉 배열에서 3번째 원소에는 3번째까지의 합, 6번째 원소에는 6번째까지의 합을 저장하는 식입니다. 그리고 배열의 B번째 원소에서 A-1번째 원소를 빼주면 답을 구할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.*;
import java.util.StringTokenizer;
 
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int A, B;
        String s = br.readLine();
        StringTokenizer st = new StringTokenizer(s);
        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());
 
        int []arr = new int[B+1];
        int i, j=1;
        int cnt = 1;
        while(true){
            for(i=0;i<j;i++){
                arr[cnt] = arr[cnt-1+ j;
                if(cnt == B){
                    System.out.println(arr[B] - arr[A-1]);
                    System.exit(0);
                }
                cnt++;
            }
            j++;
        }
    }
}
cs

 

반응형