2023. 7. 16. 15:24, 알고리즘/BOJ
처음 플로이드 문제를 해결할때, 거리를 초기에 무한대로 놓기 위해서 내가 생각한 수는 0x7fffffff이었는데,
다른 풀이의 코드에서는 초기값을 0x3f3f3f3f의 값을 사용하기에 이 두 값에 대해서 비교하는 검색을 해보았다.
이러한 답변을 얻을 수 있었다.
'0x3f3f3f3f'는 'int' 타입의 최댓값에 가까운 값으로, 특히 다익스트라 알고리즘과 같은 최단 경로 문제에서
초기 거리 배열을 무한대 값으로 초기화할 때 사용됩니다. 이 값은 'INT_MAX' 보다 작아서 오버플로우가
발생하지 않는 동시에 충분히 크기 때문에 무한대 값을 나타내기에 적합합니다.
라는 표현이 있는데, 확실히 0x7fffffff의 경우 int 값의 최대 범위에서 완전 끝 값이기 때문에 혹시나 모를 연산에서 int 오버플로우가
발생할 수 있을텐데, 0x3f3f3f3f의 값은 대략 10억이 조금 넘는 범위이기 때문에 그러한 걱정은 하지 않아도 되는 값이면서,
충분히 큰 값이다.
물론 연산에서 무한대 값을 결정하고, 그 값들을 연산에 활용해서 더하고 빼고 하는 형태의 코드가 아니라면 둘다 사용해도 문제가 없겠으나
이러한 0x3f3f3f3f을 사용하는데에는 충분히 합당한 이유가 있음을 알 수 있었다.
어떠한 값을 사용하여도 상관없겠으나, 0x3f3f3f3f의 값도 기억해두도록 하자. 오히려 0x7fffffff보다 알아보기 쉬운 면도 있어서
무한대의 값을 사용할때 이 값을 사용하여도 좋을것 같다.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 17182번 문제를 통해 다시 접하게된 next_permutation(); 에 대하여. (0) | 2023.07.18 |
---|---|
boj 11404번 문제를 풀며 접하게 된 fill 함수에 대하여. (0) | 2023.07.16 |
boj 16486번 문제를 통해서 보는 c++에서의 소수점 몇번째 자리 자리수와 fixed와 precision(); (0) | 2023.07.14 |
boj 2250번 문제를 통해 접하게된 구조화된 바인딩(structed binding)과 &을 이용한 참조. (0) | 2023.07.07 |
boj 20955번 문제에 대한 풀이중, dfs와 사이클 감지를 이용하는 코드 작성하기. (0) | 2023.07.05 |
Comments, Trackbacks