작성
·
219
·
수정됨
0
#include <iostream>
#include <cstdlib>
using namespace std;
1090번 문제 1섹션 1강 완전탐색 강의 5번째 문제입니다.
c++에서 만든 코드입니다. 백준에 제출 했는데 integerOverFlow로 오류가 나옵니다.(예제는 모두 잘 실행됩니다)
int의 범위에서 문제가 생길 것 같은 곳은 long long int 나 arr로 고쳤는데도 런타임 오류가 계속 뜹니다.
도저히 어떤 부분에서 문제가 생기는지 짐작이 안가네요
int main(int argc, char **argv) {
int n;
int pointX, pointY; // <- 기준으로 완전 탐색
int minX, minY, maxX, maxY; //완전 탐색할 범위
cin >> n;
int arr[n][2];
for(int i=0; i<n; i++){
cin >> arr[i][0] >> arr[i][1];//함수값 받기
}
minX = arr[0][0]; maxX = arr[0][0]; //일단 값 1개 설정
minY = arr[0][1]; maxY = arr[0][1];
for(int i=1; i<n; i++){ // 완전 탐색할 범위 찾기
if(arr[i][0]>maxX){
maxX = arr[i][0];
}
else if(arr[i][0]<minX){
minX = arr[i][0];
}
if(arr[i][1]>maxY){
maxY = arr[i][1];
}
else if(arr[i][1]<minY){
minY = arr[i][1];
}
}
pointX=minX; pointY=minY;
long long int size = (maxY-minY+1)*(maxX-minX+1); //완전 탐색하는 횟수
long long int xy=0; // 완전 탐색해서 2차원 배열에 넣기 위한 열의 *번째
long long int arr_dis[size][n];
for(int i=minY; i<=maxY; i++){
for(int j=minX; j<= maxX; j++){
for(int l=0; l<n; l++){ //각 점에서 최소길이 구해서 한 행에 순차적으로 넣기
int subY= 0, subX=0;
subY = i-arr[l][1];
subX = j-arr[l][0];
arr_dis[xy][l] = abs(subX) + abs(subY);
}
xy+=1;
}
}
//일단 가능한 범위 내에서 모든 경우의 수를 다 구하는 것이기 떄문에
//최소 길이는 작은 순으로 정렬 안해도 된다고 판단. 맞는지는 확인 못함
//답이 되는 어떠한 한 점의 경우가 배열의 한 행에 무조건 있을 것
//arr_dis 출력 이상 없었음
/*
for(int i=0; i<xy; i++){
for(int j=0; j<n; j++){
cout << arr_dis[i][j] << " ";
}
cout << "\n";
}
*/
for(int i=1; i<=n; i++){
long long int min_distance = 50000001;
if(i==1){
cout << 0 << " ";
continue;
}
for(int j=0; j <xy; j++){ // k개 사이의 최소 거리 찾기
int sum = 0;
for(int k=0; k<i; k++){
sum += arr_dis[j][k];
}
if(sum<min_distance){
min_distance = sum;
}
}
cout << min_distance << " ";
}
return 0;
/*
for(int i=0; i<xy; i++){
for(int j=0; j<n; j++){
cout << arr_dis[i][j] << " ";
}
cout << "\n";
}
n
xy0 1 3 8
1 0 2 7
2 1 1 6
3 2 0 5
4 3 1 4
5 4 2 3
6 5 3 2
7 6 4 1
8 7 5 0
*/
}
답변 1
0
안녕하세요, 인프런 AI 인턴이에요. integerOverflow가 뜨는 이유에 대해 설명해드릴게요.
integerOverflow는 정수의 범위를 벗어날 때 발생하는 오류입니다. int 자료형은 일반적으로 -2147483648부터 2147483647까지의 값을 표현할 수 있습니다. 이 범위를 벗어나면 integerOverflow가 발생하게 됩니다.
이 코드에서도 long long int를 사용해서 범위를 넓혀주었지만, 여전히 integerOverflow가 발생하는 이유는 아마 계산 과정에서 발생할 수 있는 문제일 것입니다. 예를 들어, 완전 탐색할 범위가 매우 큰 경우, 차이를 계산하는 부분에서 Overflow가 발생할 가능성이 있습니다.
정확한 원인을 파악하기 위해서는 코드의 나머지 부분도 함께 살펴봐야 할 것 같아요. 다른 부분에도 Overflow가 발생할 가능성이 있기 때문이에요. 코드 전체를 확인해보고, 어디에서 Overflow가 발생하는지 찾아보세요. 그리고 해당 부분을 수정하여 Overflow를 방지할 수 있도록 해보세요.
더 자세한 설명이 필요하다면, 해당 부분 코드와 함께 다시 질문해주세요. 도움이 되었길 바랄게요.
long long int로 계산해도 범위를 벗어나는 것 같네요 감사합니다