문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한 조건
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.
입출력 예
| x | n | answer |
| 2 | 5 | [2,4,6,8,10] |
| 4 | 3 | [4,8,12] |
| -4 | 2 | [-4, -8] |
해설 :
1. 자료형의 함정 (오버플로우 방지)
제한 조건을 보면 x는 최대 10,000,000이고,n은 최대 1,000입니다.
만약 x가 10,000,000이고 n이 1,000일 때 마지막에 들어갈 숫자는
10,000,000 * 1,000 = 10,000,000,000 (100억)이 됩니다.
자바에서 기본 정수형인 int가 담을 수 있는 가장 큰 숫자는 약 21억입니다.
따라서 x * (i + 1)을 그냥 int끼리 곱해버리면 21억을 넘어가는 순간 데이터가 터져버려서(오버플로우)
이상한 마이너스(-) 값이 배열에 들어가게 됩니다.
그래서 곱셈을 하기 전에 (long) x를 통해 x를 더 큰 자료형인 long으로
잠시 변환시켜 준 뒤 곱해야 100억이라는 숫자도 안전하게 계산할 수 있습니다.
2. 배열의 생성
리스트나 배열을 사용할 때는 배열의 길이를 처음부터 미리 정해 주어야 합니다.
new long[n]은 "길이가 n인 long 타입 배열을 새로 만들어줘!"라는 명령어입니다.
3. 배열의 인덱스는 0부터 시작
n칸짜리 배열을 만들면 위치(인덱스)는 1이 아니라 0부터 n-1까지입니다.
그래서 for 문을 int i = 0부터 i < n까지 돌린 것이며,
첫 번째 칸(i=0)에는 x * 1이 들어가야 하므로 곱하는 수를 (i + 1)로 맞춰주었습니다.
풀이한 코드🔽
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
for (int i = 0; i < n; i++) {
answer[i] = (long) x * (i + 1);
}
return answer;
}
}
'Daily 코드카타' 카테고리의 다른 글
| [코드카타] 코딩테스트입문 : 문자열을 정수로 바꾸기 - 2026.06.25 풀이 (0) | 2026.06.25 |
|---|---|
| [코드카타] 코딩테스트입문 : 자연수 뒤집어 배열로 만들기 - 2026.06.24 풀이 (0) | 2026.06.24 |
| [코드카타] 코딩테스트입문 : 나머지가 1이 되는 수 찾기 - 2026.06.22 풀이 (0) | 2026.06.22 |
| [코드카타] 코딩테스트입문 : 약수의 합 - 2026.06.22 풀이 (0) | 2026.06.22 |
| [코드카타] 코딩테스트입문 : 자릿수 더하기 - 2026.06.17 풀이 (0) | 2026.06.22 |