[JAVA] int와 long의 차이 ➡️ 범위와 오버플로우 문제 완벽 정리
in JAVA
프론트엔드 개발자 관점에서 Responsive와 Reactive의 뜻을 알아보자.
int와 long의 차이
- 자꾸 문제를 풀다 int와 long을 혼동해서 문제를 틀리는 경우가 있어서 완벽 정리하려고 한다.
- 입력값의 범위와 연산 결과의 최댓값을 기준으로 판단하는 습관을 들여야 함
int와 long의 입력값
int
: 약 -2,147,483,648 ~ 2,147,483,648long
: 약 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808- 문제에 입력값이 명시되어 있다면
- -2,000,000,000 <= N,M <= 2,000,000,000
int
는 처리 가능. 하지만 연산 결과를 생각해야 함
- 범위가
int
의 한계와 가깝다면, 입력값은 int로 가능하더라도 연산 결과가 범위를 초과할 수 있기 때문에long
을 사용하는 것이 안전
- -2,000,000,000 <= N,M <= 2,000,000,000
판단 기준
- 입력값이
-10^9 ~ 10^9
사이일 경우- 단순한 덧셈이나 뺄셈은
int
로 처리 가능 - 곱셈, 제곱 연산, 누적 합계 등은
long
이 필요할 수 있음
- 단순한 덧셈이나 뺄셈은
- 입력값이
-10^{10}
이상이거나, 결과적으로 큰 숫자가 나올 가능성이 있다면- 무조건
long
사용
- 무조건
연산 결과의 최대값 예상하기
- 문제에서 요구하는 연산 결과 예상하기
- 예) 누적합 문제
- 배열의 크기가 1,000,000이고, 각 원소가 최대 10^6이라면, 누적합은 최대 10^12가 될 수 있음
- 이 경우 int의 범위를 초과하므로 long을 사용해야 함
문제를 보고 빠르게 판단하는 팁
- 입력 범위 확인
- 연산의 종류 확인
- 규칙 만들기
- “입력값이 10^9 이상이면 무조건
long
으로 처리한다”
- “입력값이 10^9 이상이면 무조건
- 테스트 데이터 체크
- 극단적인 입력값을 대입해보기