코딩테스트(Level 0~1)

[JAVA, Programmers] 문자열 다루기 기본(자바)

justdoIT0730 2022. 11. 21. 19:37
728x90
728x90

1. 문제 설명

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

 

2. 제한사항

1 ≤ left ≤ right ≤ 1,000

 

3. 입출력

left right result
13 17 43
24 27 52

 

4. 입출력 설명

- 입출력 #1

다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2

따라서, 13 + 14 + 15 - 16 + 17 = 43 return 해야 합니다.

 

- 입출력 #2

다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

약수 약수의 개수
24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4

따라서, 24 - 25 + 26 + 27 = 52 return 해야 합니다.

 

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        int a[] = new int[right - left + 1];
        for (int i = 0; i < a.length; i++) {
            a[i] = left;
            left += 1;
        }
        for(int t=0; t<a.length; t++) {
            int N = a[t];	//배열 a의 요소 : N
            int count =0;	//N의 약수 개수
            for (int i = 1; i*i <= N; i++) {		//약수 개수 구하기
                if (i*i == N) count++;
                else if (N % i == 0) count += 2;
            }
            if(count%2==0) {answer += N;}
            else {answer -= N;}
        }
        return answer;
    }
}

1. left 와 rigth 사이에 수를 배열 a에 저장

2. 배열 a에서 약수의 개수 구하기

//약수 개수 구하기 

[참조]

https://chwan.tistory.com/entry/Java-%EC%95%BD%EC%88%98%EC%9D%98-%EA%B0%9C%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0

 

[Java] 약수의 개수 구하기

방법1 N의 약수 개수 구하는 방법을 생각했을 때 바로 떠오르는 방법은 N을 1부터 N까지의 숫자로 나눠 약수인지 판별하여 카운트를 해주는 방법이다. 코드로 구현해보면 아래와 같다. int N = 100000

chwan.tistory.com

https://doodle-ns.tistory.com/32

 

[노트] 모든 약수를 구하는 알고리즘은 O(sqrt(n))이다.

학원 학생들이 약수를 모두 찾는 (또는 약수의 합, 개수를 구하거나, 소수 판별 등등) 코드를 어떻게 짜는지 살펴보면, 백이면 백 \(O(n)\) 알고리즘을 사용한다. 하지만 어떤 수의 모든 약수를 구

doodle-ns.tistory.com

3. 약수 개수의 짝수, 혹수 여부에 따라 덧/뺄셈 하기

728x90

 

 

너무 정리 안된 상태로 마무리하여 이 문제는 다른 사람의 풀이를 보고 이해하면서 다시 풀어보았다..

 

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;
    }
}

 

 

참 많이 다른 과정,,,, 클린 코딩하도록 노력하자,,

728x90
728x90