문제 설명
정수 x
와 자연수 n
이 주어졌을 때, x
부터 시작해 x
씩 증가하는 숫자를 n
개 반환하는 문제입니다. x
는 양수, 음수, 또는 0일 수 있으며, 결과 리스트는 x의 배수로 채워져야 합니다.
제한 사항
x
는-10,000,000
이상,10,000,000
이하인 정수입니다.n
은1
이상,1,000
이하인 자연수입니다.
입출력 예
x | n | 결과 |
---|---|---|
2 | 5 | [2, 4, 6, 8, 10] |
4 | 3 | [4, 8, 12] |
-4 | 2 | [-4, -8] |
문제 풀이
1. Java 코드 풀이
import java.util.Arrays;
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); // x의 배수를 저장
}
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(Arrays.toString(sol.solution(2, 5))); // 출력: [2, 4, 6, 8, 10]
System.out.println(Arrays.toString(sol.solution(4, 3))); // 출력: [4, 8, 12]
System.out.println(Arrays.toString(sol.solution(-4, 2))); // 출력: [-4, -8]
}
}
코드 설명
입력:
x
: 시작 값이자 증가할 간격.n
: 출력할 숫자의 개수.
배열 생성:
- 크기가
n
인long[]
배열을 선언합니다. 여기서long
타입을 사용하는 이유는,x
의 값이 매우 클 수 있기 때문입니다(-10,000,000 ≤ x ≤ 10,000,000
). 따라서int
타입 범위를 넘을 수 있는 값을 대비해야 합니다.
- 크기가
배열 채우기:
for
루프를 사용하여 배열을 채웁니다.x
의 배수를 차례대로 계산해서answer[i]
에 넣습니다.i + 1
을 곱해x
,2x
,3x
, ... 등의 값을 배열에 저장합니다.
결과 반환:
- 완성된 배열을 반환합니다.
2. Python 코드 풀이
def solution(x, n):
return [(x * (i + 1)) for i in range(n)]
# 테스트 예시
print(solution(2, 5)) # 출력: [2, 4, 6, 8, 10]
print(solution(4, 3)) # 출력: [4, 8, 12]
print(solution(-4, 2)) # 출력: [-4, -8]
코드 설명:
리스트 컴프리헨션을 사용하여 Python 코드가 매우 간결합니다.
range(n)
은 0부터n-1
까지의 값을 생성하며, 여기에(i + 1)
을 곱해x
,2x
,3x
, ... 등의 값을 리스트에 담습니다.
배열 반환:
- 계산된 값을 리스트로 반환합니다.
3. 시간 복잡도 분석
두 코드 모두 O(n)의 시간 복잡도를 가집니다.
- 입력으로 주어진 자연수
n
의 크기만큼 반복문을 실행하여 배열을 채우기 때문에, 시간이n
에 비례합니다.
4. 공간 복잡도 분석
공간 복잡도 역시 O(n)입니다.
- 결과로 반환할 배열을 생성하고 그 크기가
n
이므로, 추가적으로 n개의 공간이 필요합니다.
5. 다른 자바 코드 풀이 방법
방법 1: Stream API 사용 (Java 8 이상)
Java 8부터는 Stream API
를 이용하여 배열이나 리스트를 처리할 수 있습니다. 이 방식으로 문제를 풀면 더욱 간결하게 작성할 수 있습니다.
import java.util.stream.LongStream;
class Solution {
public long[] solution(int x, int n) {
return LongStream.range(1, n + 1)
.map(i -> i * x)
.toArray();
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(Arrays.toString(sol.solution(2, 5))); // 출력: [2, 4, 6, 8, 10]
System.out.println(Arrays.toString(sol.solution(4, 3))); // 출력: [4, 8, 12]
System.out.println(Arrays.toString(sol.solution(-4, 2))); // 출력: [-4, -8]
}
}
결론
- 이 문제는
x
의 배수를 계산하여n
개의 값을 반환하는 문제로, O(n)의 시간 복잡도를 가지며 매우 효율적으로 풀 수 있습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 자릿수 더하기 (0) | 2024.10.13 |
---|---|
[프로그래머스] 짝수와 홀수 (0) | 2024.10.13 |
[프로그래머스] 평균 구하기 (0) | 2024.10.13 |
[프로그래머스] 나머지가 1이되는 수 찾기 (0) | 2024.10.12 |
[프로그래머스] 뒤에서 5등까지 (0) | 2024.10.12 |