문제
문제 풀이
처음에는 반복문으로 B까지의 배열을 생성해서 그냥 더해야 하나 싶었는데 뭔가 비효율적인 것 같아서 인덱스를 이용해서 풀었다.
아래와 같이 1+2+3.. 이런식으로 더해나갈 때 그 수의 마지막 인덱스 번호가 되는 것을 이용했다.
인덱스 구간 안에 A와 B가 포함될 때, 해당 숫자 값을 곱해서 answer변수에 넣어줬다.
해당 숫자 구간 안에 들어왔으면 그때의 더해진 인덱스(해당 숫자의 마지막 인덱스 번호)에서 A값을 빼면 해당 숫자를 몇 개 더해야 하는지 알 수 있다.
이때, A,B가 같은 숫자 구간에 있는 경우는 따로 처리해주어야 된다. (A,B각각 처리되어서 오류났었음)
소스 코드
public class b_1292 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
sc.close();
boolean flag = false;
int idx = 0, answer = 0;
for(int i = 1; i <= B; i++) {
idx += i;
if(idx >= B && flag) {
// (idx - i + 1) : i숫자의 시작 인덱스
answer += (B - (idx - i + 1) + 1) * i;
break;
}
if(flag)
answer += i * i;
if(idx >= A && !flag) {
answer += (idx - A + 1) * i;
flag = true;
if(idx >= B) { //같은 i구간 내에 있는 경우 처리
answer = (B - A + 1) * i;
break;
}
}
}
System.out.println(answer);
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 2437번 저울 자바 (0) | 2022.05.06 |
---|---|
[백준] 1213번 팰린드롬 만들기 자바 (0) | 2022.04.29 |
[백준] 2461번 대표 선수 자바 (0) | 2022.04.25 |
[백준] 20365번 블로그2 자바 (0) | 2022.04.20 |
[백준] 17472번 다리 만들기2 자바 (0) | 2022.04.20 |