본문 바로가기
자바(Java)

자바 입문하기20 - 문제풀기)약수의 합

by codeyaki 2022. 1. 12.
반응형

입문하기 과정에서 배운것들을 활용해 해당 문제를 풀어보기

https://programmers.co.kr/learn/courses/5/lessons/457

 

자바 입문 - 약수의합

자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금

programmers.co.kr


문제 설명

자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한 사항
  • n은 0 이상 3000이하인 자연수입니다.
입출력 예
n return
12 28
5 6
입출력 예 설명

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.


나의 코드

class Solution {
  public int solution(int n) {
      int answer = 0;
      for (int i=1; i<=n; i++){
          if(n%i==0){
              answer += i;
          }
      }
      return answer;
  }
}

 

무난하게 통과하였다.


문제풀어보느라 일단 풀고 봤지만 만약 문제에서 n이 매우 큰수가 와서 시간을 줄여야한다면 어떻게 할수 있을까 ?
: 모든 약수는 1,2, ... , n/2, n 이다. 즉, n과 n/2의 사이만큼은 무조건 약수일수가 없다!!
그러므로 1~n/2까지 for문을 돌리고 마지막에 n을 추가해주면 될 것 같다!

class Solution {
  public int solution(int n) {
      int answer = 0;
      for(int i=1; i <= n / 2; i++) {
          if(n % i == 0) {
              answer += i;
          }
      }
      return answer+n;
  }
}

 

좀더 빠르게!! 통과 완료!!!

반응형