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 사용 기준
- 값의 범위 확인
- 입력값이 ±21억을 초과할 가능성이 있다면 **long**을 사용해야 합니다.
- 문제에서 제시된 값의 범위를 살펴보고, 산술 연산 후 결과값이 int 범위를 벗어날 가능성을 검토합니다.
- 연산 과정에서 오버플로우 가능성 확인
- 곱셈, 덧셈, 뺄셈 등 연산 중에 값이 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 필요
- 곱셈, 덧셈, 뺄셈 등 연산 중에 값이 int의 범위를 초과할 경우 long으로 처리해야 합니다.
- 문제 조건에 명시된 범위 확인
- 문제에서 **|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**이 필요합니다.
- 문제에서 **|Ai| <= 1,000,000,000**로 주어졌다면:
적용 예시
입력 조건
- N=105N = 10^5
- ∣Ai∣≤109|A_i| \leq 10^9
연산 상황별 결정
- 덧셈, 뺄셈만 있는 경우
- 두 개의 숫자를 더해도 값의 범위는 −2×109≤x≤2×109-2 \times 10^9 \leq x \leq 2 \times 10^9 → int 가능.
- 곱셈 포함
- Ai×AjA_i \times A_j의 최대값: 109×109=101810^9 \times 10^9 = 10^{18} → long 필요.
- 산술 과정에서의 누적 합
- 예를 들어, ∑Ai\sum A_i가 105×109=101410^5 \times 10^9 = 10^{14}이라면 → long 필요.
결론
- 값이 ±21억을 초과할 가능성이 있거나 곱셈 등으로 큰 값이 나올 가능성이 있다면 long 사용.
- 그 외에는 int 사용으로 충분.
좋은 수 찾기처럼 두 포인터를 사용하면서 정수 간의 연산을 다룬다면 연산 과정에서 곱셈이 포함되지 않는다면 int로도 충분할 가능성이 높습니다. 문제에서 언급한 값을 항상 체크하고, 값의 범위와 연산에 맞는 자료형을 선택하는 습관을 들이면 좋습니다! 😊
728x90
'Java' 카테고리의 다른 글
[Java] Stream 사용법 (2) | 2024.12.02 |
---|---|
[Java] String으로 입력받은 숫자들 int 배열에 한번에 저장하기 (3) | 2024.12.02 |
[Java] Scanner vs BufferedReader (0) | 2024.11.25 |
[Java] 표준입출력 System.in 클래스 (3) | 2024.11.12 |
Java소스 Class파일 디컴파일 (5) | 2024.10.03 |