문제
풀이
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int[] solution(int n) {
ArrayList<Integer> divisors = new ArrayList<>();
for(int i = 1; i <= Math.sqrt(n); i++) {
if(n % i == 0) {
divisors.add(i);
if(i != (n / i)) {
divisors.add(n / i);
}
}
}
Collections.sort(divisors);
int[] result = new int[divisors.size()];
for(int i = 0; i < divisors.size(); i++) {
result[i] = divisors.get(i);
}
return result;
}
}
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(int n) {
List<Integer> answer = new ArrayList<>();
for(int i = 1; i <= n; i++) {
if(n % i == 0) {
answer.add(i);
}
}
// List -> int[]
return answer.stream()
.mapToInt(x -> x)
.toArray();
}
}
import java.util.stream.IntStream;
import java.util.Arrays;
class Solution {
public int[] solution(int n) {
return IntStream.rangeClosed(1, n)
.filter(i -> n % i == 0)
.toArray();
}
}
- 세 번째 코드가 가장 메모리 효율적
- IntStream 을 사용하여 직접 배열로 변환하는 방법은 추가적인 메모리 할당 없이도 원하는 기능을 수행할 수 있음
- 메모리 사용 측면에서 좋은 선택
- 첫 번째 코드는 중간에 정렬을 수행하기 때문에 메모리와 시간이 더 많이 소모될 수 있음
출처
https://school.programmers.co.kr/learn/courses/30/lessons/120897
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv.0 / 인덱스 바꾸기 / Java (0) | 2024.07.01 |
---|---|
[Programmers] Lv.0 / 한 번만 등장한 문자 / Java (0) | 2024.06.20 |
[Programmers] Lv.0 / 편지 / Java (0) | 2024.06.19 |
[Programmers] Lv.0 / PCCE / 8번 / 창고 정리 / Java (0) | 2024.06.18 |
[Programmers] Lv.0 / PCCE / 7번 / 가습기 / Java (0) | 2024.06.18 |
댓글