Rylah's Study & Daily Life

[BOJ/C++] 1037. 약수 본문

BOJ/02. Mathmatics

[BOJ/C++] 1037. 약수

Rylah 2022. 1. 13. 10:57

https://www.acmicpc.net/problem/1037

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net

문제

양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.

출력

첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.

해결 방법

 1. 예제는 minValue가 모두 2이기에 예제만 보고 판단하면 나오는 배열의 값 중에서 max값에 2를 곱하면 되겠구나! 라고 착각할 수 있다.

 

2. 예를 들어서 1 / 3 이 입력되었을 때 9가 나와야 하는 것이 이 문제의 핵심이다.

 

3. minValue와 maxValue를 입력을 받을때마다 검증해서 최종적으로 minValue * maxValue가 원본 수가 되는 것이 원리이다. 문제에도 제시되었지만 1은 제외된다.

 

// Code Plus BasicA
// 0x00. Math
// Written by Rylah
// Written Date : 2022.01.13
// https://minteul.tistory.com/304
// https://www.acmicpc.net/source/37480855

// 1037. 약수
// minValue : 1000001 (input MAX : 1,000,000)
// maxValue : 2 (input MIN : 2)

// Real Number = minValue * maxValue

#include <bits/stdc++.h>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n;
	cin >> n;
	int maxValue = 2;
	int minValue = 10000001;
	while (n--)
	{
		int a;
		cin >> a;
		maxValue = max(maxValue, a);
		minValue = min(minValue, a);
	}
	int result = maxValue * minValue;

	cout << result << '\n';
	return 0;
}

'BOJ > 02. Mathmatics' 카테고리의 다른 글

[BOJ/C++] 2609. 최대공약수와 최소공배수  (0) 2022.01.13
[BOJ/C++] 17425. 약수의 합  (0) 2022.01.13
[BOJ/C++] 17427. 약수의 합 2  (0) 2022.01.13
[BOJ/C++] 4375. 1  (0) 2022.01.13
[BOJ/C++] 10430. 나머지  (0) 2022.01.12