본문 바로가기

Algorithm/Mathematics

Baekjoon 1037 약수

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

소스결과 1988 KB / 0 ms

출처 Baekjoon

언어 C++ 17

분류 수학

 

설명

N의 n개 진짜 약수가 주어질 때 N을 구하는 프로그램을 만들자

 

N의 약수중 1과 N이 아닌 약수를 진짜 약수라고 한다.

n이 홀수 일 떄와 짝수일 때가 있는데 홀수일 경우는 N이 제곱수이다.

N을 구하기 위해서는 최대 값과 최소 값만 알면 상관이 없지만, 이번 문제에서는 정렬을 이용해 최대/최소 값을 구하거나 중앙값을 구하는 방법을 사용했다.

 

알고리즘

1. n개의 수를 입력 받는다.

2. n개의 수를 오름차순으로 정렬한다.

3. n이 홀수인 경우 중앙값을 제곱해 출력하고, 짝수인 경우 최대값과 최소값을 곱해 출력한다.

 

소스결과

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const short MAX = 50;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int count;
	int res = 0;
	vector<int> childList;
	cin >> count;
	
	childList.resize(count);

	for (int i = 0; i < count; i++)
		cin >> childList[i];

	sort(childList.begin(), childList.end());

	if (count % 2)
		res = childList[count / 2] * childList[count / 2];
	else
		res = childList[0] * childList[count-1];

	cout << res;

	return 0;
}

 

 

'Algorithm > Mathematics' 카테고리의 다른 글

Baekjoon 1977 완전제곱수  (0) 2019.04.01
Baekjoon 1212 8진수 2진수  (0) 2019.03.31
Baekjoon 16563 어려운 소인수분해  (0) 2019.03.31
Baekjoon 13458 시험감독  (0) 2019.03.08
BaekJoon 1356 유진수  (0) 2019.01.29