라피신 문제를 풀다가 타임아웃을 만날 때가 가끔 있다.
왜?
이유는 간단하다. 존나게 많은 값을 비교하니 연산 시간이 걸려서다.
int 변수를 받아 1부터 제곱해주며 목표값까지 비교한다고 쳐보자.
idx = 0;
while (idx * idx < max)
과연 이 반복문은 예외처리 break 없이
모든 경우에서 반복문을 끝낼 수 있을까?
아니다.
만약 max가 int의 최대값일 때,
idx의 제곱이 int의 최대값을 넘기면,
오버플로우가 일어나 최소값이 되기에 값으로만 비교할 경우 빠져나갈 수 없다.
주의해야 한다.
그러면 해결방법은?
간단한 두가지 방법을 제시해보겠다.
1. 더 큰 자료형 변수를 받아 값을 비교해보기(int범위를 넘어서도 오버플로우가 일어나지 않음)
2. 반복문 내에서 예외처리를 통해 idx의 최대값에 제한주기
+. 양수만으로 비교한다면 idx * idx > 0을 반복 조건에 넣는 것도 추천한다.
'생각' 카테고리의 다른 글
남을 시기하지 말자. (0) | 2023.05.04 |
---|---|
내 인생 5계명 (0) | 2021.04.03 |
잠이 안 온다. (0) | 2021.03.22 |
인상깊은 글귀 (0) | 2021.03.18 |
아무것도 하지 않으면 아무것도 바뀌지 않는다. (0) | 2021.03.15 |