티스토리 뷰

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
반응형
댓글