상세 컨텐츠

본문 제목

< 백준 BaekJoon : 9506번 약수들의 합> C++

C++/Baekjoon

by J2on 2023. 8. 3. 20:12

본문

문제

https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

풀이

사실 약수같은 경우 제공되는 수의 root값 까지만 판별해주면 돼서 크게 어렵지 않죠

 

근데 어떻게 더해지는지 출력하는건 좀 귀찮은 부분이긴 합니다.

 

그래서 저는 vector로 때려넣고 sort() 사용해서 쉽게쉽게 갔습니다.

 

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    int numN;
    int sum;
    while(1){
        sum = 1;
        vector<int> vec = {1};
        cin >> numN;
        if(numN == -1){break;}
        
        for(int i = 2; i< sqrt(numN); i++){
            if(numN % i == 0){
                vec.push_back(i);
                vec.push_back(numN/i);
                sum += i;
                sum += numN/i;
            }
        }
        
        if(sum != numN){
            cout << numN << " is NOT perfect.";
        }
        else{
            sort(vec.begin(),vec.end());
            cout << numN << " = " << vec[0];
            
            for(int i=1; i<vec.size(); i++){
                cout << " + " << vec[i];
            }
        }
        cout << endl;
    }
}

 

이젠 검색없이 STL 쓰는법을 좀 익혀야  하는데 마음처럼 쉽지는 않네요.

 

https://github.com/J2on/StudyAlgorithm_Part2/tree/main/%EB%B0%B1%EC%A4%80/Bronze/9506.%E2%80%85%EC%95%BD%EC%88%98%EB%93%A4%EC%9D%98%E2%80%85%ED%95%A9

관련글 더보기

댓글 영역