개발자/문제풀이 (C언어)
[백준/BOJ] 1037번 약수 (C/C++)
devBB
2023. 12. 26. 20:41
728x90
반응형

백준 온라인 저지(BOJ) 1037번 약수
https://www.acmicpc.net/problem/1037
1037번: 약수
첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되
www.acmicpc.net
* 사용언어 : C언어, C++
1. 문제
N의 진짜 약수(1과 N을 제외한 약수)가 모두 주어질 때 N을 출력

2. 풀이
가장 작은 약수와 가장 큰 약수의 곱이 N이라는 것을 이용하여 문제를 풀었습니다.
처음에는 모든 약수를 정렬한 뒤 처음과 끝 숫자를 곱하려고 했었는데,
다시 생각해보니 min, max만 찾아서 곱해도 된다는 것을 알았습니다.
그래서 약수를 하나씩 입력받을 때 마다 min, max와 비교한 뒤 바꿔주는 방식으로 단순하게 풀었습니다.
3. 코드
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
1037_약수
1112KB 0ms
*/
#include <cstdio>
int N, n, min = 1000000, max = 2;
int main() {
#ifdef _WIN32
freopen("input.txt", "r", stdin);
#endif // _WIN32
scanf("%d", &N);
while (N--) {
scanf("%d", &n);
if (n < min) min = n;
if (n > max) max = n;
}
printf("%d\n", min * max);
return 0;
}
728x90
반응형