[JAVA] int와 long의 차이 ➡️ 범위와 오버플로우 문제 완벽 정리

프론트엔드 개발자 관점에서 Responsive와 Reactive의 뜻을 알아보자.


int와 long의 차이

  • 자꾸 문제를 풀다 int와 long을 혼동해서 문제를 틀리는 경우가 있어서 완벽 정리하려고 한다.
  • 입력값의 범위와 연산 결과의 최댓값을 기준으로 판단하는 습관을 들여야 함

int와 long의 입력값

  • int : 약 -2,147,483,648 ~ 2,147,483,648
  • long : 약 -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을 사용하는 것이 안전

판단 기준

  • 입력값이 -10^9 ~ 10^9 사이일 경우
    • 단순한 덧셈이나 뺄셈은 int로 처리 가능
    • 곱셈, 제곱 연산, 누적 합계 등은 long이 필요할 수 있음
  • 입력값이 -10^{10} 이상이거나, 결과적으로 큰 숫자가 나올 가능성이 있다면
    • 무조건 long 사용

연산 결과의 최대값 예상하기

  • 문제에서 요구하는 연산 결과 예상하기
  • 예) 누적합 문제
    • 배열의 크기가 1,000,000이고, 각 원소가 최대 10^6이라면, 누적합은 최대 10^12가 될 수 있음
    • 이 경우 int의 범위를 초과하므로 long을 사용해야 함

문제를 보고 빠르게 판단하는 팁

  1. 입력 범위 확인
  2. 연산의 종류 확인
  3. 규칙 만들기
    • “입력값이 10^9 이상이면 무조건 long으로 처리한다”
  4. 테스트 데이터 체크
    • 극단적인 입력값을 대입해보기