문제
주어진 정수들 중 입력 받은 수의 약수와 배수의 합을 각각 출력하라.
예를 들면,
6개의 정수 2, 3, 5, 12, 18, 24 가 주어지고 12를 입력 받은 경우
12의 약수는 2, 3, 12 이고
12의 배수는 12, 24 이다.
입력
첫 줄에 정수의 개수 n (1<= n <=40)을 입력 받는다.
둘째 줄에는 n개의 정수를 한 줄에 입력 받는다.
셋째 줄에는 약수와 배수를 구할 정수 m(1<=m<=100)을 입력 받는다.
출력
첫 줄에는 정수 m의 약수의 합을 둘째 줄에는 정수 m의 배수의 합을 출력한다.
예제 입력
6
2 3 5 12 18 24
12
예제 출력
17
36
처리조건
(1) n 은 (1<= n <=40) 을 만족해야 한다.
(2) m은 (1<=m<=100) 을 만족해야 한다.
if (1 <= n && n <= 40)
{
if (1 <= m && m <= 100)
{
}
}
따라서 위와 같이 조건을 설정하고 진행하였으며 조건에 부합하지 않을 경우 return 0; 으로 종료하도록 세팅했다.
<입력의 설계>
- 배열의 크기를 입력받을 변수 n, 정수 리스트를 입력할 배열 arr[] 을 선언하였다.
- 배열 arr[] 의 크기는 n이 1~40이하의 정수이기 때문에 arr[40] 으로 제한해 데이터 낭비를 줄였다.
- 배수와 약수를 계산할 기준이 될 변수 m을 선언하였다.
- 약수를 저장할 변수 Div, 배수를 저장할 변수 Mul을 선언하였다.
- 숫자 크기 제한등의 조건을 참고해 다음과 같이 뼈대를 세웠다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n, m;
int arr[40] = { 0 };
int Div = 0, Mul = 0;
scanf("%d", &n);
if (1 <= n && n <= 40)
{
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &m);
if (1 <= m && m <= 100)
{
}
}
return 0;
}
<출력의 설계>
- m의 약수가 arr[i] 의 리스트와 같을 경우 Div 변수에 더하여 저장
if ((m % arr[i])==0) Div += arr[i];
m % arr[i] == 0 일 경우, 나누어 떨어지기 때문에 arr[i]은 m의 약수이다.
또한 입력받은 숫자 리스트에 있는 숫자와 같다는 것을 의미한다.
따라서 Div변수에 더해준다.
- m의 배수 가 arr[i] 의 리스트와 같을 경우Mul 변수에 더하여 저장
if ((arr[i] % m)==0) Mul += arr[i];
arr[i] % m == 0 일 경우, 나누어 떨어지기 때문에 arr[i]은 m의 배수이다.
또한 입력받은 숫자 리스트에 있는 숫자와 같다는 것을 의미한다.
따라서 Mul 변수에 더해준다.
- 최종 출력
printf("%d\n", Div);
printf("%d\n", Mul);
printf 함수를 이용해 Div와 Mul을 출력하여 주었다.
설계특징
나는 직관적으로 " ==0 " 을 사용하여 식을 짰는데, 전체에 괄호를 한번 더 묶고 " ! " 를 해 주어도 된다.
제출답변
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n, m;
int arr[40] = { 0 };
int Div = 0, Mul = 0;
scanf("%d", &n);
if (1 <= n && n <= 40)
{
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &m);
if (1 <= m && m <= 100)
{
for (int i = 0; i < n; i++)
{
if ((m % arr[i]) == 0) Div += arr[i];
if ((arr[i] % m)==0) Mul += arr[i];
}
printf("%d\n", Div);
printf("%d\n", Mul);
}
}
return 0;
}
'Algorithm > Jungol (수학1)' 카테고리의 다른 글
[1658] 최대공약수와 최소공배수 (0) | 2023.09.19 |
---|---|
[2809] 약수 (0) | 2023.09.19 |
[1402] 약수구하기 (0) | 2023.09.19 |
[1430] 숫자의 개수 (0) | 2023.09.19 |
[1691] 곱셈 (0) | 2023.09.19 |