백준9506번: 약수들의 합

Johnny Lee·2023년 4월 13일
0

백준 1일1제

목록 보기
11/14

인트로

오늘은 단계별로 풀어보기 약수, 배수와 소수 파트에 있는 9506번 약수들의 합을 풀어보았다.시험기간이라 다름 브론즈 문제들로 꾸준히 풀려고 노력해야겠다.

문제


링크텍스트

문제 해석

문제는 만약 약수면 약수의 합을 출력하고, 약수가 아니면 NOT perfect 출력, -1이면 프로그램을 종료하는 프로그램을 작성하는 문제이다.

코드

코드는 아래와 같다. 코드를 부분저긍로 분석을 해보겠다.

#include <iostream>
using namespace std;
int n, sum, arr[100000], idx=0;
int main() {
  while(1)
  {
    cin >> n;
    if (n == -1) break;
    for (int i = 1; i < n; i++)
    {
      if (n % i == 0){
        arr[idx++] = i;
        sum += i;
      }
    }
    if (sum != n){
      cout << n << " is NOT perfect." << '\n';
    }
    else if (sum == n){                
      cout << n << " = ";
      for (int i = 0; i < idx - 1; i++)
      {
        cout << arr[i] << " + ";
        arr[i] = 0;
      }
      cout << arr[idx - 1] << '\n';
      arr[idx-1] = 0;            
    }    
    idx = 0;
    sum = 0;
  }
}

코드 해석

먼저 약수들을 차례데로 출력을 해야하므로 바로 배열이 떠올랐다. 그리고 이와 같이 시작을 하였다.

또한 -1이 들어오는 순간 코드 실행이 멈추므로 while 문을 사용하여 숫자 -1이 들어오면 바로 실행을 끝내도록 하였고. 약수를 구하고, 배열에 저장하기 위해, for문을 사용하였다.
또한 약수는 입력된 숫자와 같으면 안되므로 for(int i=1; i <n; i++) 로 해주었다.


이어서 조건에 맞게 출력하는 프로그램이다. 만약 약수의 합이 입력된 숫자와 값이 같지 않다면, 약수가 아니므로 is NOT perfect 를 출력해준다.
그리고 만약에 약수가 맞다면, 배열 인덱스에 저장된 순서대로 출력을 해준다. for (int i = 0; i < idx - 1; i++) 그리고 또한

여기서 주의!

while 문안에서 -1이 들어오기 전까지 프로그램이 계속 돌아가므로 초기화를 계속 해주기 위해서, idx=0. sum=0 을 해준다.

소감

처음에는 문제가 쉬워보였지만, 내가 생각하지 못한 부분이 있어서 새로 배워가는 시간이었다.

profile
You can always be better

0개의 댓글