x만큼 간격이 있는 n개의 숫자
문제 설명
함수 solution은 정수 x와 자연수 n을 입력받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한 조건
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.
입출력 예
작성코드
//
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n]; // ①
for (int i = 0; i < n ; i++) { // ②
answer[i] = (long) (i + 1) * x; // ③
}
return answer;
}
}
//
코드 설명
① 입력받은 n은 개수이니 배열의 크기로 설정해준다.
② for문을 이용하여 배열의 자릿수만큼 반복한다. ( 위 코드에서 i < n; 의 조건문은 i < answer.length; 와 동일하다.)
③ answer 배열의 0번 인덱스부터 ( i + 1) * x를 대입해 주면, 출력 결과처럼 입력받은 x만큼 증가하여 출력된다.
여기서 중요한 점은 ( i + 1) * x 앞에 (long) 형으로 형 변환해주어야 한다.
형 변환을 하지 않아도 입출력의 예의 값은 나오지만 답안을 제출하게 되면 테스트 결과에서 실패가 뜬다.
그 이유는 제한 조건을 보면 알 수 있다. x는 -10,000,000 이상, 10,000,000 이하인 정수, n은 1,000 이하인 자연수이다.
만약 x의 입력값이 10,000,000이고 n의 입력값이 1,000이라고 가정해보자.
그럼 최대 출력 값이 10,000,000,000 가 된다. 하지만 int형이 표현할 수 있는 숫자는 -2,147,483,648 ~ 2,147,483,647이기 때문에 형 변환을 하지 않고 진행한다면 범위 내에서 벗어나게 된다. 그래서 long형으로 형 변환이 필요하다.
다른 사람의 풀이
import java.util.*;
class Solution {
public static long[] solution(int x, int n) {
long[] answer = new long[n];
answer[0] = x;
for (int i = 1; i < n; i++) {
answer[i] = answer[i - 1] + x;
}
return answer;
}
}