728x90

https://www.acmicpc.net/problem/1292

 

1292번: 쉽게 푸는 문제

첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1≤A≤B≤1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.

www.acmicpc.net

#include <iostream>
#include <queue>
using namespace std;

int main() {
	int aa, bb;
	cin >> aa >> bb;
	int arr[1001];
	int index = 1;
	for (int i = 1; index <= 1000; i++) {
		for (int j = 0; j < i; j++) {
			if (index > 1000) break;
			arr[index++] = i;
		}
	}
	int total = 0;
	for (int i = aa; i <= bb; i++) {
		total += arr[i];
	}
	cout << total;
	return 0;
}

처음에는 아래와 같이 제출했는데

#include <iostream>
#include <queue>
using namespace std;

int main() {
	int aa, bb;
	cin >> aa >> bb;
	int arr[1001];
	int index = 1;
	for (int i = 1; index <= 1000; i++) {
		for (int j = 0; j < i; j++) {
			arr[index++] = i;
		}
	}
	int total = 0;
	for (int i = aa; i <= bb; i++) {
		total += arr[i];
	}
	cout << total;
	return 0;
}

배열의 인덱스를 초과해도 오류가 나지 않아서 바꾸지도 않은 a와 b가 45로 바뀌는 신기한 경험을 했다. 그래서 변수 이름을 aa, bb로 바꾸기까지 했다. 그런데 index가 1000을 넘어서도 안쪽 for문이 계속 돌면서 배열이 할당된 메모리를 넘어서도 계속 쓰기 때문에 배열 다음에 할당된 a와 b를 건드리는 것이었다.

 

728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1388번 바닥 장식  (0) 2020.02.24
[백준] 1075번 나누기  (0) 2020.02.24
[백준] 수 정렬하기 3  (0) 2020.02.24
[백준] 1927 최소 힙  (0) 2020.02.24
[백준] 10569번 다면체  (0) 2020.02.22

+ Recent posts