[JAVA] 약수의 개수와 덧셈

태로미·2023년 9월 21일
0

Programmers

목록 보기
21/29
post-thumbnail

❓문제


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



🚫제한


• 1 ≤ left ≤ right ≤ 1,000



💻입출력 예


leftrightresult
131743
242752

입출력 예 #1
다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

약수약수의 개수
131, 132
141, 2, 7, 144
151, 3, 5, 154
161, 2, 4, 8, 165
171, 172

입출력 예 #2
다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

약수약수의 개수
241, 2, 3, 4, 6, 8, 12, 248
251, 5, 253
261, 2, 13, 264
271, 3, 9, 274













📝해결


1. 이중 for문

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

    for(int i=left; i<=right; i++){
      cnt = 0;
      for(int j=1; j<=i; j++){
          if(i % j == 0) cnt += 1;
      }

      if(cnt % 2 == 0) answer += i;
      else answer -= i;
    }
    
    return answer;
  }
}
  • for문의 범위를 left부터 시작해서 rigth보다 작거나 작다로 설정.
    • 보통 index로 초기값을 0으로 시작하여 n보다 작다로 설정하는걸 생각하면 이번에는 등호가 들어가야 함.
  • 약수의 개수를 카운트해주는 변수 cnt를 첫번째 for문에서 0으로 초기화.
    • 어떤 숫자냐에 따라 약수의 개수가 다르므로 여기서 초기화를 해줘야
      각 숫자마다 약수의 개수를 정확히 알 수 있음.
  • 두번째 반복문에서 1부터 i(== left)까지를 나누었을 때 나머지가 0이라면
    이 숫자는 약수.
    • 변수 cnt의 값을 1 증가시킴.
  • 약수의 개수가 짝수라면 변수 answer에 누적합, 홀수라면 누적차로 처리함.

2. 제곱수 활용

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;
  }
}  
  • Math 클래스의 sqrt()메서드 사용해서 left와 right 사이의 숫자가 제곱수인지를 판단.
    • sqrt()메서드 입력값과 출력값은 모두 double형.
  • i * i의 제곱근이 i이므로 i로 나누었을 때 나머지가 0으로 떨어진다면,
    이는 제곱수.
  • 제곱수의 경우 약수의 개수는 홀수이므로 변수 answer을 i만큼 누적차,
    반대의 경우 누적합.






💭마무리

  • Level_1 / 15:04
  • Point
    – 누적합 & 누적차
    – 제곱수의 약수 개수

제곱수의 약수 개수가 홀수인 건 또 처음 알았다^^...
그래서 처음엔 이중 for문을 사용해서 해당 숫자의 약수 개수가 몇 개인지 구하고 난 뒤 홀짝을 판별하여 최종 값에 누적합 또는 누적차를 해줬는데, 제곱수의 약수 개수 공식을 알고나니 세상 간단하다...! ^^..!!! 기억해놔야지,,,✍🏻


profile
Here And Now

0개의 댓글