C언어로 풀이할 때 숫자의 범위를 신경써줘야하는 게 Point인 문제였다.
각 도시 리터당 가격이 10억 이하의 자연수이고,
맨 왼쪽 도시에서 맨 오른쪽 도시까지 거리의 합이 10억 이하인데,
이들을 더해나가는 과정의 결괏값을 담을 result 만 long long(8Byte)로 처리해주면 된다고 생각하면 오류를 일으키게 된다.
23째 줄을 보면, long long 자료형의 result에 int형 변수인 now_min과 edges[i]를 곱해서 더해준다.
만약 두 int형 변수를 타입 캐스팅 없이 곱하게 되었을 때, int형의 표현 가능 범위를 넘어갈 수 있고, 이 때 값에 왜곡이 일어날 것이다.
조심할 것이, (long long) (now_min * edges[i]) 와 같이 해도, 값이 달라질 것이다.
long long으로 타입 캐스팅을 하기 전에 int형끼리 곱셈을 한 결과를 int자료 리터럴 상수로 저장하는 것이 먼저 실행되기에 값의 MSB쪽 비트들이 날라가버리는 것이다.
백준 9251: LCS (Dynamic Programming / with C) (0) | 2023.10.17 |
---|---|
구름 코딩테스트 Level 2: 장마 (구현 / with C) (0) | 2023.09.29 |
Softeer Level 5: 복잡한 조립라인 2 (DP / with C) (0) | 2023.09.29 |
Softeer Level 2 : 금고 털이 (그리디 / with C) (0) | 2023.09.29 |
Softeer Level 1: 근무 시간 (구현 / with C) (0) | 2023.09.29 |