본문 바로가기

알고리즘(アルゴリズム)/알고리즘 이모저모(アルゴリズムの緒論)

long vs int

문제 출처

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

 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net

 

백준을 풀다가 맞왜틀!?의 함정에서 벗어 나지를 못하였다.

아니나 다를까 자료형의 문제였다.

최종 결과 SUM 변수는 long long형으로 선언을 하였고, 정수를 담을 배열(num)은 INT형으로 선언을 했다.

그러나 여기에 고약한 논리적 함정이 있었다.

우선 int형의 크기는 플랫폼마다 다르다. 예를 들어, 32bit 체제일 떄는 4 byte이고, 64bit 체제일 때는 8 byte이다.

그러나, long long 형은 어떤 플랫폼에서도 4 byte로 고정된 크기이다.

나는 위 사실을 간과하여서 long long 형인 sum에 int형의 정수를 대입을 하였다.

이렇게 되면, 4 byte의 변수에 8 byte가 대입되어 자료형 에러가 날 수가 있다.

백준의 채점 플랫폼이 뭔지는 모르지만, int형 sum을 다시 long long으로 정의를 했을 때, 맞은 걸로 보아서는 백준의 

채점 플랫폼은 64 bit체제여서 에러가 계속해서 났던 것 같다.   

 

자료형의 문제를 최소화하기 위하여, 대입하는 변수끼리는 최대한 같은 자료형으로 선언하자.