[백준] 약수들의 합(9506) (C++)

comomo·2024년 3월 30일

코딩연습

목록 보기
1/28

앞으로 수업을 진행하며 풀어본 문제들, 내가 선정한 문제들 올릴예정이다.

문제

https://www.acmicpc.net/problem/9506
백준-9506 약수들의 합(브론즈1)


분석

1.어떤 정수를 입력을 받은 뒤 그 숫자가 완전수인지 판별을 진행한다.
2-1. 완전수이면(ex 6) "6 = 1 + 2 +3"을 출력
2-2. 완전수가 아니라면(ex 12) "12 is NOT perfect."를 출력
3. 입력이 -1이 아니면 2-1, 2-2를 반복


약수를 구하는 과정에서 약수들의 합을 저장해야하고 완전수일시 출력을 위하여 약수들을 저장을 해 두어야 반복작업을 줄일 수 있을것 같다.

코드

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

int main(){
    int n,sum; //정수를 입력받을 변수, 약수들의 합
    vector<int> divisor; //약수저장할 벡터
    while(1){
        cin >> n;
        sum=0;
        if(n==-1) break;
        
        for(int i=1;i<=n/2;i++){ //약수 구하기
            if(n%i==0) { //약수인지 확인
                divisor.push_back(i); //약수면 벡터에 삽입
                sum+=i; 
            }
        }
        if(sum==n){ //완전수인지 확인
        //완전수이면 실행
            int size=divisor.size();
            cout << n<<" = "<<1;
            for(int i=1;i<size;i++){
                cout<<" + "<<divisor[i];
            }
            cout<<endl;
        }
        else{ //완전수가 아니면 실행
            cout << n<<" is NOT perfect."<<endl;
        }
        divisor.clear(); //벡터 초기화
    }
}

결과

개선할 부분

괄호나 변수명, ' ; '의 사용에 틀린부분들이 많이 나오고 출력형식을 지키지 않아 틀린 부분들이 존재하여 이러한 부분들에 주의를 기울일 필요가 있다고 생각된다.

profile
안녕하세요!

0개의 댓글