반응형
출처: https://www.acmicpc.net/problem/1292
Approach
for 문을 연습하기 좋은 문제라고 생각한다.
주어지는 A, B의 범위가 1000 이하이므로
배열 크기 = 1000으로 만들어서
arr = [1 2 2 3 3 3 4 4 4 4 ...45, 45]와 같이 원소를 채워넣는다.
입력으로 받은 구간 [A, B] 합을 for문으로 탐색한 후 출력한다.
O(N)의 시간으로 실행시간은 충분하다
C++
#include <stdio.h>
const int MAX_N = 1e3 + 5;
int arr[MAX_N];
int A, B, ans, cnt, val;
int main()
{
// freopen("input.txt", "r", stdin);
scanf("%d %d", &A, &B);
cnt = val = 1;
while (cnt <= 1000) // 배열에 1000개의 데이터를 채운다.
{
for (int i = 1; i <= val; i++)
{
arr[cnt++] = val;
if (cnt > 1000) break;
}
val++;
}
// 구간합
for (int i = A; i <= B; i++) {
ans += arr[i];
}
printf("%d\n", ans);
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 특정범위를 입력 받는다.
int A = Integer.parseInt(sc.next());
int B = Integer.parseInt(sc.next());
int[] arr = new int[1001];
int idx = 1;
int cnt = 1;
// 전체구간의 숫자를 할당한다.
while(true) {
// 1은 한 개, 2는 2개, 3은 3개씩...
for(int i=0; i<cnt; i++) {
// 숫자 할당
arr[idx++] = cnt;
// 모든 배열의 숫자의 배정이 끝났다면...
if(idx > 1000) {
int sum = 0;
// 특정 구간의 합을 구한 후, 출력한다.
for(int j=A; j<=B; j++) {
sum += arr[j];
}
System.out.println(sum);
return;
}
}
cnt++;
}
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 1550 16진수 (0) | 2021.09.14 |
---|---|
[BOJ] 백준 1316 그룹 단어 체커 (0) | 2021.09.13 |
[BOJ] 백준 1157 단어 공부 (0) | 2021.08.31 |
[BOJ] 백준 1152 단어의 개수 (0) | 2021.08.27 |
[BOJ] 백준 1094 막대기 (0) | 2021.08.26 |
댓글