[프로그래머스][레벨1] 약수의 합_연습문제

2021. 11. 24. 22:35·Algorithm/Programmers (프로그래머스)
728x90
반응형

문제

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

제한 조건

n은 0 이상 3000이하인 정수입니다.

예시

n return
12 28
5 6

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

실행 코드

파이썬

# Ver.1
def solution(n):  	# 함수선언, 매개변수 n
    li = []  		# 약수를 저장하기위한 리스트 선언
    # 약수 찾기
    for i in range(1,n+1):
        if n%i == 0:  	# n를 i로 나눈 나머지가 0이면 i는 약수
            li.append(i)  # i를 리스트에 저장
    return sum(li)  	# 모든 약수를 더한 값 반환
# Ver.2
def sumDivisor(n):
    # 성능 향상을 위해 num / 2 의 수들만 검사
    return n + sum([i for i in range(1, (n // 2) + 1) if n % i == 0])

 

자바

// Ver.1
// Solution.java

import java.util.ArrayList;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> arr = new ArrayList<>();	// 리스트 생성
        // 약수 구하기
        for(int i=1;i<n+1;i++) {
        	// 나머지가 0이면 약수라는 뜻이므로 리스트에 추가
            if(n%i == 0) {
                arr.add(i);
            }
        }
        // 약수의 합 구하기
        for(int i = 0; i < arr.size(); i++){
            answer += arr.get(i);
        }
        return answer;
    }
    
  // 아래는 테스트 출력을 위한 코드입니다
  public static void main(String[] args) {
    Solution c = new Solution();
    System.out.println(c.solution(12));
  }
}
// Ver.2
// SumDivisor.java
class SumDivisor {
    public int sumDivisor(int n) {
        int answer = 0;
        // 성능 향상을 위해 n / 2 의 수들만 검사
        for(int i = 1; i <= n/2; i++){
        if(n%i == 0) answer += i;	
      }
        return answer+n;
    }

    // 아래는 테스트 출력을 위한 코드입니다
    public static void main(String[] args) {
        SumDivisor c = new SumDivisor();
        System.out.println(c.sumDivisor(12));
    }
}

- n/2의 수들만 검사 하는 이유?
n의 약수는 무조건 1과 n이 들어가고 그다음 2이후의 숫자가 들어갈수도 안들어갈수도 있는데
약수 2가 들어간다고 가정한다면 n/2이내의 수만 약수가 되기때문에 n/2 밖의 숫자는 필요없다.
따라서, n/2 이내의 약수(숫자)만 구한 다음 n를 더해준다.

 

'Algorithm > Programmers (프로그래머스)' 카테고리의 다른 글

[프로그래머스][MySQL] SELECT - 상위 n개 레코드  (2) 2024.12.17
[프로그래머스][레벨1] 자연수 뒤집어 배열로 만들기_연습문제  (0) 2021.12.09
[프로그래머스][레벨1] 자릿수 더하기_연습문제  (0) 2021.11.23
[프로그래머스][레벨1] 평균 구하기_연습문제  (0) 2021.11.22
[프로그래머스][레벨1] x만큼 간격이 있는 n개의 숫자_연습문제  (0) 2021.11.21
'Algorithm/Programmers (프로그래머스)' 카테고리의 다른 글
  • [프로그래머스][MySQL] SELECT - 상위 n개 레코드
  • [프로그래머스][레벨1] 자연수 뒤집어 배열로 만들기_연습문제
  • [프로그래머스][레벨1] 자릿수 더하기_연습문제
  • [프로그래머스][레벨1] 평균 구하기_연습문제
깜냠미
깜냠미
it 블로그입니다.
  • 깜냠미
    PLAY WORLD
    깜냠미
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • Programming Langue (23)
        • Python (파이썬) (19)
        • Typescript (타입스크립트) (1)
        • Javascript (자바스크립트) (3)
      • Algorithm (114)
        • Baekjoon (백준) (106)
        • Programmers (프로그래머스) (8)
      • ETC (9)
        • Tool (5)
        • DataBase (2)
        • Git || GitHub (1)
        • 번역글 (1)
      • WEB (8)
        • React (5)
        • 기초 (0)
      • 일상 (2)
        • 정보 (1)
        • 구경 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    Python
    백준
    백준 자바
    백준 1단계
    백준 파이썬
    백준 1차원배열
    문자열
    백준 3단계
    백준 7단계
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
깜냠미
[프로그래머스][레벨1] 약수의 합_연습문제
상단으로

티스토리툴바