순간을 기록으로

[JAVA] 프로그래머스 약수의 개수와 덧셈 본문

Problem Solving

[JAVA] 프로그래머스 약수의 개수와 덧셈

luminous13 2022. 1. 17. 12:04

문제

https://programmers.co.kr/learn/courses/30/lessons/77884?language=java 

 

코딩테스트 연습 - 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주

programmers.co.kr

풀이

약수에 대한 개념이 필요한 문제다. N의 약수란 N을 나누어 떨어지게 하는 양의 정수를 말한다.

예를들어 4의 약수는 1, 2, 3, 4가 있다. 3의 약수는 1, 3이다. 어떤 수가 나누어 떨어지는지는 알려면 나머지 연산(%)을  사용하면 된다. 만약 나누어 떨어지는 수라면 나머지 연산을 한 반환값이 0이 나와야 한다.

 

코드

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class Solution {
    public int solution(int left, int right) {
        int answer;
        int sum = 0;

        for (int i=left; i<=right; i++) {   // left부터 right 값까지 검사한다.
            int num = findNumOfDivisor(i);  // 이 메소드는 약수의 갯수를 반환한다.

            if (num%2 == 0) // 만약 약수의 갯수가 짝수면
                sum += i;
            else    // 만약 약수의 갯수가 홀수면
                sum -=i;
        }

        answer = sum;
        return answer;
    }

    private int findNumOfDivisor(int num) {
        int count = 0;

        for (int i=1; i<=num; i++) {
            if (num%i == 0)
                count++;
        }
        return count;
    }

    @Test
    void test() {
        Assertions.assertEquals(solution(13,17), 43);
        Assertions.assertEquals(solution(24,27), 52);
    }
}

 

'Problem Solving' 카테고리의 다른 글

[Java] 최대 길이 연속부분수열  (0) 2022.01.17
[Java] 프로그래머스 폰켓몬  (0) 2022.01.17
[Java] 회의실 배정  (0) 2022.01.14
[JAVA] 체육복  (0) 2022.01.14
[Java] 소수만들기  (0) 2022.01.13
Comments