hoon's bLog

Java 프로그래머스 약수의 개수와 덧셈 자바 본문

코딩테스트/프로그래머스

Java 프로그래머스 약수의 개수와 덧셈 자바

개발한기발자 2022. 6. 13. 13:32
반응형

문제출처 : https://programmers.co.kr/learn/courses/30/lessons/77884

 

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

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

programmers.co.kr


[나의 풀이]

- 주어진 left, right 값으로 배열의 길이 설정

- 반복문을 이용하여 각 숫자의 약수를 리스트에 담아, return 변수에 약수의 개수의 홀짝 여부를 판별하여 범위 내 숫자 +/-

import java.util.ArrayList;
class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        int[] rangeNum = new int[right - left + 1];
        for(int i=0; i < rangeNum.length; i++){
            rangeNum[i] = left + i;
            //범위내 숫자의 약수를 저장할 ArrayList 선언
            ArrayList<Integer> arrList = new ArrayList<>();
            for(int j=1; j <= rangeNum[i]; j++){
                if(rangeNum[i]%j == 0)
                    arrList.add(j);		//list에 약수 저장
            }
            //list의 크기로 홀/짝 판단을 하여 return 변수에 값을 +/-하여 바로 저장
            answer = (arrList.size()%2 == 0 ? answer+rangeNum[i] : answer-rangeNum[i]);
        }

        return answer;
    }
}

 

[다른사람의 풀이-1]

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        for (int i=left;i<=right;i++) {
            //제곱수인 경우 약수의 개수가 홀수
            if (i % Math.sqrt(i) == 0) answer -= i;
            //제곱수가 아닌 경우 약수의 개수가 짝수
            else answer += i;
        }
        return answer;
    }
}

 

[다른사람의 풀이-2]

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        //애초에 left, right로 범위를 정해 반복문
        for(int i = left; i<=right; ++i){
            int count = 0;
            for(int j=1; j<=i; ++j)
                if(i%j == 0) count++;

            if(count%2 == 0)
                answer += i;
            else
                answer -= i;
        }
        return answer;
    }
}

 

[정리]

- 이전에 올렸던 3진법뒤집기에서도 사용되었던 input 값으로 범위 지정하기를 또 깜빡했다...

- 제곱수를 이용하여 약수의 개수 판별을 통해 해당 숫자의 약수를 각각 구하는 수고를 덜하는 아이디어는 정말 대단하다!..

 

개인피셜 난이도 : ★☆☆☆☆

불필요한 라이브러리를 추가할 필요없이 조금만 더 생각해보면 될 것을...

심지어 다른 사람들의 코드를 리뷰했음에도 불구하고 또 내 방식에 빠져 버렸다...

3번의 실수는 없다.

다음번엔 꼭! 이런 방식들을 이용해서 코딩해봐야겠다!!

(3번 실수는 정말 사람아님 퉤퉤퉤!!!!!!!!)

 

끝!

728x90
반응형