본문 바로가기
Java

[Java] Int와 Long 사용 구분하기

by IronAreum 2024. 12. 2.
728x90

알고리즘 공부중에 

변수선언시 int 와 long을 어떨때 쓰는지 느낌적인 느낌으로 쓰다가

급 궁금해져서 우리의 친구 ChatGPT에게 물어봄!

 

 [질문] : 
안녕! 내가 지금 알고리즘 공부중인데, 좋은수찾기라고 투포인터 쓰는 알고리즘 공부중이거든. 문득 궁금해진게, 입력값이 N개의 수의 값 (Ai)이 주어짐 (|Ai| <= 1,000,000,000, Ai는 정수) 일때 int가 아니라 long을 사용해야 한다고 되어있는데 int와 long을 사용하는 기준이 정확하게 어떻게 구분되는지 알려줘

 

 

[ChatGPT 답변] :

알고리즘에서 **int**와 **long**의 사용 기준은 주로 저장할 수 있는 값의 범위에 따라 결정됩니다. 이를 이해하려면 각 자료형의 범위를 알아야 합니다:


728x90

int와 long의 범위 (Java 기준)

  • int: -2,147,483,648 ~ 2,147,483,647 (약 ±21억)
    • 4바이트 크기 (32비트)
  • long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (약 ±92경)
    • 8바이트 크기 (64비트)

int vs long 사용 기준

  1. 값의 범위 확인
    • 입력값이 ±21억을 초과할 가능성이 있다면 **long**을 사용해야 합니다.
    • 문제에서 제시된 값의 범위를 살펴보고, 산술 연산 후 결과값이 int 범위를 벗어날 가능성을 검토합니다.
  2. 연산 과정에서 오버플로우 가능성 확인
    • 곱셈, 덧셈, 뺄셈 등 연산 중에 값이 int의 범위를 초과할 경우 long으로 처리해야 합니다.
      • 예: int 범위에서 1,000,000×1,000,000=1,000,000,000,0001,000,000 \times 1,000,000 = 1,000,000,000,000 은 초과 → long 필요
  3. 문제 조건에 명시된 범위 확인
    • 문제에서 **|Ai| <= 1,000,000,000**로 주어졌다면:
      • 두 개의 Ai를 더하거나 빼면 값의 범위가 ±21억을 넘지 않을 가능성이 높음 → int로 처리 가능.
      • 하지만 곱셈이 포함된다면 결과값이 최대 1,000,000,000×1,000,000,000=1,000,000,000,000,000,0001,000,000,000 \times 1,000,000,000 = 1,000,000,000,000,000,000이 되어 **long**이 필요합니다.

적용 예시

입력 조건

  • N=105N = 10^5
  • ∣Ai∣≤109|A_i| \leq 10^9

연산 상황별 결정

  1. 덧셈, 뺄셈만 있는 경우
    • 두 개의 숫자를 더해도 값의 범위는 −2×109≤x≤2×109-2 \times 10^9 \leq x \leq 2 \times 10^9int 가능.
  2. 곱셈 포함
    • Ai×AjA_i \times A_j의 최대값: 109×109=101810^9 \times 10^9 = 10^{18}long 필요.
  3. 산술 과정에서의 누적 합
    • 예를 들어, ∑Ai\sum A_i105×109=101410^5 \times 10^9 = 10^{14}이라면 → long 필요.

결론

  • 값이 ±21억을 초과할 가능성이 있거나 곱셈 등으로 큰 값이 나올 가능성이 있다면 long 사용.
  • 그 외에는 int 사용으로 충분.

좋은 수 찾기처럼 두 포인터를 사용하면서 정수 간의 연산을 다룬다면 연산 과정에서 곱셈이 포함되지 않는다면 int로도 충분할 가능성이 높습니다. 문제에서 언급한 값을 항상 체크하고, 값의 범위와 연산에 맞는 자료형을 선택하는 습관을 들이면 좋습니다! 😊

 

 

728x90