반응형
https://www.acmicpc.net/problem/1292
- 문제
- 문제 풀이
백준 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);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 9093번 : 단어 뒤집기 – JAVA [자바] (0) | 2022.09.17 |
---|---|
[백준] 1977번 : 완전제곱수 – JAVA [자바] (0) | 2022.09.12 |
[백준] 2420번 : 사파리월드 – JAVA [자바] (0) | 2022.09.07 |
[백준] 2530번 : 인공지능 시계 – JAVA [자바] (2) | 2022.09.07 |
[백준] 1032번 : 명령 프롬프트 – JAVA [자바] (0) | 2022.09.05 |
댓글