문제 풀이/프로그래머스 알고리즘

약수의 개수와 덧셈 // for문 , if문 사용 + stream 사용

열심히 해 2024. 10. 5. 20:24

https://school.programmers.co.kr/learn/courses/30/lessons/77884

 

import java.util.ArrayList;

class Solution {
    public int solution(int left, int right) {
        ArrayList<Integer> argsList = new ArrayList<>();
        int answer = 0;
        for (int i = left; i <= right; i++) {
            argsList.add(i);
        }

        for (int i: argsList) {
            ArrayList<Integer> arrayList = new ArrayList<>();
            for (int j = 1; j <= i; j++) {
                if (i % j == 0) {
                    arrayList.add(j);
                }
            }
            if (arrayList.size() % 2 != 0) {
                i = i * -1;
            }
            answer = answer + i;
        }
        return answer;
    }
}

 

스트림으로 표현

 

import java.util.stream.IntStream;

class Solution {
    public int solution(int left, int right) {
        return IntStream.rangeClosed(left, right)
                .map(i -> {
                    // 약수의 개수를 구함
                    long divisorCount = IntStream.rangeClosed(1, i)
                            .filter(j -> i % j == 0)
                            .count();

                    // 약수의 개수가 홀수면 음수로, 짝수면 그대로
                    return divisorCount % 2 == 0 ? i : -i;
                })
                .sum();  // 모두 더한 값을 반환
    }
}