상세 컨텐츠

본문 제목

백준 13305: 주유소 (그리디 / with C)

C알고리즘

by 앱등개발자IOS 2023. 9. 29. 18:23

본문

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쪽 비트들이 날라가버리는 것이다.

따라서 23째 줄처럼 미리 long long으로 타입 캐스팅을 해주고 곱해서 더해줘야한다.!!!

관련글 더보기