나의 풀이
class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
long y = x;
for (int i = 0;i < n;i++) {
answer[i] = y;
y += x;
}
return answer;
}
}
트러블슈팅 1
long[] answer = {};
빈 배열에 값을 넣으려고 해서 아래와 같이 예외가 발생했다.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Ex16_2$Solution.solution(Ex16_2.java:6)
at Ex16_2.main(Ex16_2.java:16)
long[] answer = new long[n];
배열의 개수를 n으로 설정해서 초기화했습니다.
트러블슈팅 2
for (int i = 0;i < n;i++) {
answer[i] = x;
x += x;
}
위와 같이 설정했더니 기댓값 2,4,6,8,10이 아닌
2,4,8,16,32가 나왔다.
int y = x;
for (int i = 0;i < n;i++) {
answer[i] = y;
y += x;
}
그래서 y라는 변수를 추가했다.
트러블슈팅 3
제출 후 채점하기에서 일부 문제가 실패하게 되었다.
원인은 새로 추가한 변수의 타입이 문제였다.
배열은 long 타입이기 때문에 int 범위를 초과하는 값을 넣을 경우 문제가 발생할 수 있다.
따라서 아래와 같이 수정했다.
long y = x;
트러블슈팅을 작성해보니, 내가 생각보다 놓치고 있는 지점들이 있다는 것을 깨달았다.
다음에는 좀 더 꼼꼼하게 고려하면서 문제를 풀어야겠다.
다른 사람의 풀이 1
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;
}
}
i를 1부터 시작해서 이전 값에 x를 더한다는 점이 더 바람직하다고 생각한다.
문제를 그대로 잘 해석했다고 생각한다.
다른 사람의 풀이 2
import java.util.stream.LongStream;
class Solution {
public long[] solution(int x, int n) {
return LongStream.iterate(x, i->i+x).limit(n).toArray();
}
}
LongStream.iterate(x, i -> i + x)
- x부터 시작해서 i + x씩 증가하는 무한 스트림을 만듭니다.
- 예: x = 3이면 → 3, 6, 9, 12, ...
.limit(n)
- 스트림에서 앞의 n개까지만 가져옴
- 예: x = 3, n = 5 → 3, 6, 9, 12, 15
.toArray()
- 스트림을 long[] 배열로 변환해서 반환함
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12954/solution_groups?language=java
'CODING > CS, 알고리즘, 자료구조 공부' 카테고리의 다른 글
[프로그래머스] 문자열을 정수로 바꾸기 (2) | 2025.06.19 |
---|---|
[프로그래머스] 자연수 뒤집어 배열로 만들기 (1) | 2025.06.13 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (0) | 2025.05.28 |
[프로그래머스] 약수의 합 (0) | 2025.05.27 |
[프로그래머스] 자릿수 더하기 (0) | 2025.05.14 |