문제 풀이 및 개발 공간

[백준] 1292번 쉽게 푸는 문제! (bronze 1 본문

백준공부/java

[백준] 1292번 쉽게 푸는 문제! (bronze 1

gomduri43 2022. 7. 17. 16:59

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();

	}
}