[BOJ] 1037_약수

ProblemSolving / / 2021. 1. 16. 00:26

약수

문제 링크: https://www.acmicpc.net/problem/1037

 

1037번: 약수

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

www.acmicpc.net

N의 진짜 약수를 주어지면 그 약수를 가지는 정수 N을 찾는 문제이다.

이는 정말 어려운 문제가 아니다.

 

N이 가지는 약수 중 가장 작은 수는 N이 가지는 약수 중 가장 큰 수와 매치가 된다.

예를 들면, 문제에서는 1과 N을 제외한 수를 준다고 했으나 1과 N을 포함한다면,

1이 가장 작은 수, N이 가장 큰 수가 될 것이다.

이 둘이 매치가 되어 1 * N = N이 된다.

 

그렇다면 1과 N을 제외한 수 중 가장 작은 수를 구하면, 그와 매치되는 수는 자연스레 가장 큰 수가 됨을 이해할 수 있다.

따라서, 입력되는 수 중 가장 작은 수와 가장 큰 수를 찾고 곱해주면 끝이다.

 

#include<iostream>
using namespace std;
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)

int main() {
	int N;
	cin >> N;
	int max_ = 0, min_ = 10000000;

	while (N--) {
		int i;
		cin >> i;
		max_ = max(max_, i);
		min_ = min(min_, i);
	}
	cout << max_ * min_ << endl;
	return 0;
}

 

'ProblemSolving' 카테고리의 다른 글

[BOJ] 1026_보물  (0) 2021.01.20
[BOJ] 1021_회전하는 큐  (0) 2021.01.19
[BOJ] 1015_수열정렬  (0) 2021.01.18
[BOJ] 1002_터렛  (0) 2021.01.17
[BOJ] 1010_다리 놓기  (2) 2021.01.15
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기