Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 1292번 쉽게 푸는 문제! (bronze 1 본문
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st=new StringTokenizer(br.readLine());
int start=Integer.parseInt(st.nextToken());
int end=Integer.parseInt(st.nextToken());
int[] num=new int[1001];
int sum=0;
int aroundStart;
int number=0;
int result=0;
//이것은 어떻게 보면 1이 1개, 2가 2개 이런식, 즉 3은 3개.
//1 2 2 3 3 3 으로, 3은 1+2구간 다음부터 1+2+3 구간까지이다,
//따라서 이렇게 더하면서, 이값이 start지점이랑 같으면, 예를들면 start가 3이면 1+2=3이므로
//start 즉 3번째 구간은 2의 마지막이자, start는 숫자 2부터 시작하게 되는 것이다.
//sum>=start로 하여, sum==start 일 때는 그 구간이 i부터 시작인 것이고,
//sum>start이면, start는 sum과 다른 값, 즉 그전 구간의 끝이 아닌 새로운 구간,
//sum-i< start < sum구간인 것이다. 이는 바꿔 말하면, start가 4일때
//sum-i(6-3 즉 2의 끝구간) < start < sum(6으로 3의 끝구간)
//따라서 그 구간의 경계점인 sum을, 그 구간의 수인 i를 number로 저장한다.
for(int i=1; i<1001; i++) {
sum+=i;
if(sum>=start) {
number=i; break;
}
}
//주어진 구간 start와 end사이의 수를 더하는 과정이다.
//sum은 1,2,3,.. 숫자의 합으로 이는 어떠한 수의 끝구간까지 나타낸 것이다ㅏ.
//3은 2의 끝구간, 6은 3의 끝구간....
//따라서, i>sum일때는 새로운 구간으로 들어선 것이므로, 구간의 바뀐수를 number에 표현
//새로운 경계점을 주기위해 sum+=number를 하여, 새로운 구간과 그 구간의 수를 표현한다.
//sum>=i일때 i는 한마디로 sum의 구간안에 있고 그 구간의 수는 모두 number이다. 예를들어, sum이 6 이면
//i가 4 5 6번째 구간에서는 모두 그수가 3이다.
for(int i=start; i<=end; i++) {
if(sum<i) {
number++;
sum+=number;
}
if(sum>=i) {
result+=number;
}
}
bw.write(result+"");
bw.flush();
}
}
'백준공부 > java' 카테고리의 다른 글
[백준] 4796번 캠핑 문제! (silver 5 (0) | 2022.07.17 |
---|---|
[백준] 10250번 ACM호텔 문제! (bronze 3 (0) | 2022.07.17 |
[백준] 1330번 두 수 비교하기 문제! (bronze 5 (0) | 2022.07.17 |
[백준] 10430번 나머지 문제! (bronze 5 (0) | 2022.07.17 |
[백준] 9498번 시험 성적 문제! (bronze 5 (0) | 2022.07.17 |