발자취
[백준 / C언어] Day28. 약수 (1037) 본문
2024. 07. 01 - 코딩테스트 스터디 Day28
01. 문제
양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
02. 입력
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
03. 출력
첫째 줄에 N을 출력한다. N은 항상 32비트 부호 있는 정수로 표현할 수 있다.
04-1. 예제 입력 1
2
4 2
04-2. 예제 출력 1
8
05-1. 예제 입력 2
1
2
05-2. 예제 출력 2
4
06-1. 예제 입력 3
6
3 4 2 12 6 8
06-2. 예제 출력 3
24
07-1. 예제 입력 4
14
14 26456 2 28 13228 3307 7 23149 8 6614 46298 56 4 92596
07-2. 예제 출력 4
185192
08. 풀이 및 답
#include <stdio.h>
int main() {
int num_of_divisors; // n의 약수의 개수
int divisors; // n의 약수
long long max = 0;
long long min = 1000001;
scanf("%d", &num_of_divisors);
for (int i = 0; i < num_of_divisors; i++) {
scanf("%d", &divisors);
if (divisors > max) {
max = divisors;
}
if (divisors < min) {
min = divisors;
}
}
printf("%lld\n", max * min);
return 0;
}
우선 n의 약수와 약수의 개수를 저장할 변수를 선언해주고, max와 min 변수를 long long 타입으로 선언 및 초기화해 준다.
(이때 long long 타입으로 선언하는 이유는 문제에서 'N은 항상 32비트 부호 있는 정수로 표현할 수 있다.'라고 했기 때문.)
n의 약수의 개수를 입력받고, 그만큼 반복문을 돌면서 n의 약수를 입력받는다.
이때, 입력받은 약수가 변수 max에 들어있는 값보다 크다면, 이 값을 max에 저장하고
입력받은 약수가 변수 min에 들어있는 값보다 작다면, 이 값을 min에 저장한다.
반복문을 빠져나온 후에 변수 max에 들어있는 값과 변수 min에 들어있는 값의 곱이 n값이다.
따라서 이 값을 출력해 주면 된다!

정답!

끝!
'코딩테스트 > Daily Coding (C, C++)' 카테고리의 다른 글
| [프로그래머스 Lv.1 / C언어] Day30. 없는 숫자 더하기 (0) | 2024.07.03 |
|---|---|
| [프로그래머스 Lv.1 / C언어] Day29. 음양 더하기 (0) | 2024.07.02 |
| [백준 / C언어] Day27. 1 (4375) (0) | 2024.06.30 |
| [백준 / C언어] Day26. 나머지 (10430) (0) | 2024.06.28 |
| [프로그래머스 Lv.1 / C++] Day25. 서울에서 김서방 찾기 (0) | 2024.06.28 |