int에서 오버플로우 문제 발생했을 때
발생 원인
int는 4byte즉, 32bit로 -2^31 ~ +2^31-1 즉, 약 ±2,000,000,000
까지만 표현이 가능하고
이 범위를 넘어가면 오버플로우가 발생한다.
발생 상황
int를 여러번 곱하는 for문에서 주로 발생한다.
또한, 1,000,000,007
로 나눈 나머지를 요구하는 문제가 있으면 오버플로우가 발생하는지를 의심해봐야한다.
해결 방법
아래 내용 중 하나라도 지키지 않으면 오버플로우가 발생할 수 있다.
1) 계산하는 변수를 int가 아니라 long
으로 선언한다.
2) for문 안에서 %= 1,000,000,007
을 해준다.
for문에서 곱셈을 다 하고 return 직전에 mod연산을 해주면 이미 오버헤드가 발생한 이후이므로 효과가 없다.
3) return 할 때 long을 int로 강제 형변환
해준다.
=> (int)longAnswer
cf. long은 64bit로 int보다 0 세개는 더 커버 가능함
'JAVA' 카테고리의 다른 글
[JSP] 인텔리제이에서 서블릿 프로젝트 설정하기 (0) | 2023.06.27 |
---|---|
자바로 html 출력하기 (0) | 2023.06.12 |
[JAVA] Array to List (0) | 2023.05.23 |
[JAVA] 문자열 자르기 (0) | 2023.05.23 |
[JAVA] StringBuilder 주요 메소드와 사용 방법 (0) | 2023.05.23 |