개념
정수 자료형
정수를 저장할 때는 입력뿐 아니라 계산 중간에 만들어지는 값의 범위도 확인합니다. 길이가 인 배열의 각 값이 최대 이면 합은 최대 입니다.
| 항목 | C++ | Java | Python |
|---|---|---|---|
| 대회에서 흔히 쓰는 기본 정수 | int | int | int |
| 더 큰 정수 | long long | long | 같은 int |
| 정수 최댓값 확인 | numeric_limits<int>::max() | Integer.MAX_VALUE | 메모리가 허용하는 크기까지 확장 |
Java의 int는 부터 까지, long은 부터 까지 저장합니다. C++의 자료형 크기는 구현에 따라 정해지며, 일반적인 대회 환경의 int는 32비트, long long은 64비트입니다.
Python 정수는 값이 커지면 저장 공간도 늘어납니다. 큰 정수의 연산 비용은 자릿수의 영향을 받습니다.
연산 도중의 오버플로
자료형이 표현할 수 있는 범위를 벗어나면 오버플로가 발생합니다. C++의 부호 있는 정수 오버플로는 동작이 정의되지 않으며, Java에서는 자료형의 비트 수를 넘는 윗부분이 버려져 의도한 값과 다른 결과가 나옵니다.
C++과 Java에서 두 int를 곱한 뒤 더 큰 범위의 정수형 변수에 저장하더라도, 곱셈 자체가 int로 수행되면 중간 결과가 먼저 int 범위를 벗어날 수 있습니다. 곱하는 두 수 중 하나를 더 큰 범위의 자료형으로 바꾼 뒤 곱해야 합니다.
| 동작 | C++ | Java | Python |
|---|---|---|---|
| 넓은 정수로 곱셈 | 1LL * a * b | 1L * a * b | a * b |
복잡도
아래 예제의 두 길이와 곱은 크기가 제한된 정수입니다.
| 연산 | 시간복잡도 | 공간복잡도 |
|---|---|---|
| 두 길이의 곱 | 추가 |
예제
문제
직사각형의 넓이를 구하여라.
입력
첫째 줄에 직사각형의 가로 길이 와 세로 길이 가 공백을 사이에 두고 주어진다. 이다.
출력
직사각형의 넓이를 출력한다.