int VS long

드코미·2025년 7월 17일
post-thumbnail

코딩테스트에서 가장 많이 사용하는 변수형은 int입니다.
intlong은 기능 면에서 큰 차이가 없습니다.

다만 코딩 테스트에서 만큼은 long이 더 좋습니다.

왜냐면 둘의 표현 가능 범위가 이렇게나 차이가 납니다.

코딩테스트에서는 문제의 답이나 풀이 과정에서 자료형의 범위를 넘어가는 경우가 종종 있습니다.

✔️ case 1. 모든 자료형에서 표현이 불가능한 경우

문제에서 정답 값을 XX로 나눈 나머지를 출력하세요.
이런식으로 말을 해준다.

✔️ case 2. int로는 불가능하고 long으로 표현 가능한 경우

따로 언급을 해주지 않습니다.
별도로 언급이 없습니다.

  • 대부분 테케 통과했는데, 특정 테스트 케이스에서만 실패한다?!?!? 의심을 해볼 필요가 있다!
  • 테케를 이미 다 맞았을 경우도 절대절대 방심하면 노노!

지금 int로 했을때 10억하고 20억을 더하면, 값이 음수로 이상해짐.
그런데, long으로 하면 옳바른 결과 나옴!


오버플로우를 피하기 위한 안전한 선택 long

코딩테스트에서 보통 10^9을 초과하면 int형을 사용할 수 없다고 합니다.

예상하기에, 값이 10^9 가 넘어가면 long을 쓰세요...

int a = 1_000_000_000;  // OK
int b = 2;

int result1 = a * b;  // ❌ 오버플로우 발생!
System.out.println(result1);  // 잘못된 값 출력

// a 하나를 long으로 캐스팅하면, 연산 전체가 long이 됨. 
long result2 = (long) a * b;  // ✅ OK

⚠️주의: 나중에만 long으로 바꾸면 의미가 없음

int result = a * b;
long fixed = (long) result;  // ❌ 이미 오버플로우 된 뒤임

long으로 뒤늦게 바꾼다고 해도, 이미 망가진 값이 저장되어, 망가진 값이 그대로 옮겨지기 때문!

long 변수 선언 방법

long num = 12345678900L;

끝에 L 또는 l 붙이는 걸 꼭 기억합니다.
(L이 더 권장됨. l은 숫자 1이랑 헷갈림)

왜 L을 붙여야 해?

자바에서 숫자 리터럴은 기본적으로 int 타입으로 인식됩니다.

long num = 12345678900;  // ❌ 에러! 12345678900은 int 범위 초과
long num = 12345678900L; // ✅ OK
profile
할 수 있다!!!

0개의 댓글