코딩 테스트에서 변수를 선언할 때 어떤 타입을 선택해야 할지 초초보인 나는
냅다 int로만 사용하다가 틀려서 보면 long으로 바꿔야 했거나 하는 경우가 종종 있었다.
(잘못된 타입을 선택하면 오버플로우나 부동소수점 오류가 발생할 수 있다.)
기준 메모해두기!
코딩 테스트에서 문제를 읽을 때 값의 범위와 연산을 먼저 확인하면 변수 타입을 쉽게 결정할 수 있다.
🔎 int (기본적으로 사용)
✔ 범위: -2,147,483,648 ~ 2,147,483,647 (약 21억)
✔ 사용 예시:
- 단순 카운트, 인덱스, 개수 (N, count)
- 21억 이하의 합이나 연산 (score, sum)
🔎 double (소수 계산 필요할 때)
✔ 사용 예시:
- 나눗셈 연산이 필요한 경우 (평균, 비율)
- 정수 나눗셈에서 오차를 방지하고 싶을 때
📌 예제:
❌ int 사용 시: 50 / 70 = 0 (정수 나눗셈)
✅ double 사용 시: 50.0 / 70 = 0.7142857 (실수 계산)
🔎 long (21억 초과할 때)
✔ 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
✔ 사용 예시:
- 숫자가 21억 이상이 될 가능성이 있는 경우 (큰 수의 합, 팩토리얼 값)
📌 예제:
❌ int sum = 2,000,000,000 + 1,000,000,000; // 오버플로우 발생!
✅ long sum = 2_000_000_000L + 1_000_000_000L; // 정상 동작
풀었던 문제 중에서 평균을 구하는 문제 조건을 예로 들어 보면
과목 개수 N≤1000
각 점수 그리고 난 sum 변수를 사용했는데
👉 sum의 최대값은 100 × 1000 = 100,000
👉 10만을 넘지 않으므로 int로 충분
👉 long을 쓸 필요 없음!
이런 식으로 최대 범위를 예측하면 불필요한 long 사용을 피할 수 있음
🔎 int vs long 메모리 차이
- int → 4바이트(32비트)
- long → 8바이트(64비트)
즉, long을 쓰면 2배의 메모리를 사용함.
큰 숫자가 필요하지 않은데 long을 쓰면 메모리를 낭비하는 셈!
🔎 왜 메모리 절약이 중요할까?
1️⃣ 배열 사용 시 낭비 심화
- int[1_000_000] → 약 4MB 사용
- long[1_000_000] → 약 8MB 사용 (2배 차이!)
2️⃣ 캐시 최적화 문제
- CPU가 int보다 long을 다룰 때 메모리 접근이 더 많아져 속도 저하 가능성
💡 결론
✔ 21억 이하의 정수 연산은 int 사용!
✔ 불필요한 long 사용은 메모리 낭비!
✔ 나눗셈/소수점이 필요 → double
✔ 큰 숫자가 필요할 때만 long 사용!
'MEMO' 카테고리의 다른 글
노션 공유 링크 단축하기 (1) | 2024.09.20 |
---|---|
꾸준히 (1) | 2024.09.17 |
git 명령어 (0) | 2024.09.17 |
인텔리제이 단축키 (0) | 2024.09.17 |
velog → 티스토리 이사 (0) | 2024.09.15 |