[Baekjoon] 1292번: 쉽게 푸는 문제 - Java
2021. 12. 10. 18:55ㆍComputer Sciences/Problem Solve
https://www.acmicpc.net/problem/1292
1292번: 쉽게 푸는 문제
첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.
www.acmicpc.net

문제 설명
문제 그대로 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ... 로 이루어진 수열에서 입력받은 숫자 사이의 구간의 합을 구하면 된다.
최대 인덱스가 1000이므로 ArrayList로 숫자를 미리 저장해둔 뒤 해당 구간에 해당하는 숫자들을 읽어서 더하는 식으로 간단하게 풀었다(문제 이름 그대로).
문제 풀이
import java.io.*;
import java.util.*;
public class Main {
private static ArrayList<Integer> nums = new ArrayList<>(1010);
public static void main(String[] args) throws IOException {
int idx = 0;
loop:
for (int i = 1; i <= 1000; i++) {
for (int j = 0; j < i; j++, idx++) {
if (idx >= 1001) break loop;
nums.add(i);
}
}
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
String line = br.readLine();
String[] token = line.split(" ");
int start = Integer.parseInt(token[0]);
int end = Integer.parseInt(token[1]);
int result = 0;
for (int i = start - 1; i < end; i++) {
result += nums.get(i);
}
System.out.println(result);
}
}
}
참고
ArrayList의 기본 크기는 10이다. 우리가 저장할 값은 1000번째까지인데 기본값으로 생성하면 공간이 필요할 때마다 내부적으로 배열의 크기를 두 배로 확장하는 작업을 계속 하게 된다. 따라서 1000 이상의 넉넉한 값으로 초기화한 후 사용하는 편이 성능상 이득이다.

'Computer Sciences > Problem Solve' 카테고리의 다른 글
| [Programmers] 신규 아이디 추천 - Java (0) | 2021.12.11 |
|---|---|
| [Programmers] 로또의 최고 순위와 최저 순위 - Java (0) | 2021.12.10 |
| [Baekjoon] 1339번: 단어 수학 (0) | 2021.07.10 |
| [Baekjoon] 2751번: 수 정렬하기 2 (0) | 2021.06.02 |
| [Baekjoon] 7568번 : 덩치 (0) | 2021.05.30 |