-
[프로그래머스]약수의 합(C++)알고리즘 & 자료구조/코딩테스트 2021. 2. 16. 16:14
문제 설명
정수 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입니다.1.단순하게 하나하나 탐색하며 약수를 찾아내서 더하는 방법
#include <string> #include <vector> #include <iostream> using namespace std; int solution(int n) { int answer = 0; for(int i = 1; i <= n; i++) { if(n%i == 0) { answer = answer + i; if(n/i == i) { continue; } else{ answer = answer + (n/i); } } } return answer; } //테스트 실행용 int main(void) { int n; cin >> n; cout << solution(n); }
2.중복을 제거하여 구하는 방법
#include <string> #include <vector> #include <iostream> using namespace std; int solution(int n) { int answer = 0; for(int i = 1; i*i <= n; i++) { if(n%i == 0) { answer = answer + i; if(n/i == i) // 같은 약수 (루트 값) 인 경우 두번 더해주는것을 피하기 위한 코드 { continue; } else{ answer = answer + (n/i); } } } return answer; } int main(void) { int n; cin >> n; cout << solution(n); }
위의 if문의 경우는
예를 들어 36의 약수를 구할때 6 x 6 인 경우, 6을 두번 더해주는것을 피하기 위해 중복되는 약수가 나오는경우는
n/i 한 값을 더해주지 않고 무시 하게 해주었다
728x90반응형'알고리즘 & 자료구조 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]제일 작은 수 제거하기 (0) 2021.02.17 [프로그래머스] 소수 찾기 level1 (C++) (0) 2021.02.16 [프로그래머스] 평균 구하기(C++) (0) 2021.02.15 [프로그래머스]짝수와 홀수 (C++) (0) 2021.02.14 [프로그래머스] 정수 내림차순으로 배치하기 (C++) (0) 2021.02.13