Daily 코드카타

[코드카타] 코딩테스트입문 : x만큼 간격이 있는 n개의 숫자- 2026.06.24 풀이

정이뿡뿡 2026. 6. 24. 11:29

문제 설명

함수 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;
    }
}