728x90
🔗 문제 링크
https://www.acmicpc.net/problem/1292
📌 문제 개요
수열이 다음과 같이 주어진다.
1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
즉, 숫자 1은 1번, 2는 2번, 3은 3번, 4는 4번 등장하는 규칙을 가진다.
이때 A번째 수부터 B번째 수까지의 합을 구하는 문제
📌 접근 방법
이 문제는 규칙이 명확하고 범위도 크지 않기 때문에,
수열을 직접 만들어 놓고 A부터 B까지 더하면 된다.
- 1을 1번 넣고
- 2를 2번 넣고
- 3을 3번 넣고
- 4를 4번 넣는 방식으로
배열에 순서대로 값을 채우면 된다.
문제에서 필요한 최대 위치까지만 만들어 두면, 그 뒤에는 단순히 구간 합을 구하면 끝이다.
📌 핵심 아이디어
이 수열의 핵심 규칙은 다음 한 줄로 정리된다.
- 숫자 i는 정확히 i번 등장한다.
따라서 반복문으로 수열을 직접 구성할 수 있다.
예를 들어 배열을 만들면 다음처럼 채워진다.
- 1번째: 1
- 2번째, 3번째: 2
- 4번째, 5번째, 6번째: 3
- 7번째 ~ 10번째: 4
이후 A번째부터 B번째까지 더하면 정답이 된다.
📌 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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());
int[] arr = new int[1001];
int index = 1;
for (int i = 1; index <= 1000; i++) {
for (int j = 0; j < i && index <= 1000; j++) {
arr[index++] = i;
}
}
int sum = 0;
for (int i = A; i <= B; i++) {
sum += arr[i];
}
System.out.println(sum);
}
}
📌 정리
이 문제는 복잡한 알고리즘이 필요한 문제가 아니라,
주어진 규칙대로 수열을 잘 만들어낼 수 있는지를 묻는 구현 문제
- 숫자 i는 i번 등장한다.
- 수열을 배열에 직접 저장한다.
- A부터 B까지 합을 구한다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| [백준] 1384번 : 메시지 (JAVA) (0) | 2026.03.10 |
|---|---|
| [백준] 2167번 : 2차원 배열의 합 (JAVA) (0) | 2026.03.09 |
| [백준] 1402번 : 아무래도이문제는A번난이도인것같다 (JAVA) (0) | 2026.03.07 |
| [백준] 13241번 : 최소공배수 (JAVA) (0) | 2026.03.06 |
| [백준] 2018번 : 수들의 합 5 (JAVA) (0) | 2026.03.05 |