[Baekjoon] 1292번: 쉽게 푸는 문제 - Java
2021. 12. 10. 18:55ㆍComputer Sciences/Problem Solve
https://www.acmicpc.net/problem/1292
문제 설명
문제 그대로 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 |