약수

문제

언어

  • JavaScript

문제 풀이 step 1

  • 이번 문제는 약수의 성질을 이용해서 푸는 문제입니다.
  • 성질을 알아보기 위해서, 1 부터 12 까지 약수를 나열해보겠습니다. 괄호로 표시된 수는 진짜 약수입니다.
    • 1 = 1
    • 2 = 1, 2
    • 3 = 1, 3
    • 4 = 1, (2), 4
    • 5 = 1, 5
    • 6 = 1, (2, 3), 6
    • 7 = 1, 7
    • 8 = 1, (2, 4), 8
    • 9 = 1, (3), 9
    • 10 = 1, (2, 5), 10
    • 11 = 1, 11
    • 12 = 1, (2, 3, 4, 6), 12
  • 잘 보면 약수들을 가운데를 기준으로 서로 곱하면 원래의 수가 됩니다.
  • 예를 들어 12 의 경우
    • 1 x 12 = 12
    • 2 x 6 = 12
    • 3 x 4 = 12
  • 약수들은 이런 성질을 가지고 있습니다.

문제 풀이 step 2

  • 문제에서는 진짜 약수를 전부 제공해준다고 합니다.
  • 따라서 저희는 그 약수를 정렬해서 가장 왼쪽에 있는 수와 가장 오른쪽에 있는 수를 곱하면 원래의 수를 찾을 수 있을 것입니다.
  • 하지만 위에서 보면 4 처럼 진짜 약수가 1 개인 경우가 있습니다. 이때는 한 개인 약수를 제곱하면 원래의 수를 찾을 수 있습니다.
  • 그리고 제공해주는 진짜 약수의 개수는 50 보다 작거나 같은 자연수라고 합니다.
  • 따라서 진짜 약수의 개수는 최소한 1 이상이고, 진짜 약수가 없는 소수는 입력으로 주어지지 않습니다.

소스 코드

const input = require("fs")
	.readFileSync("/dev/stdin")
	.toString()
	.trim()
	.split("\n");

const solution = (input) => {
	const n = Number(input[0]);
	const arr = input[1]
		.split(" ")
		.map(Number)
		.sort((a, b) => a - b);

	if (n === 1) return arr[0] * arr[0];
	else return arr[0] * arr[n - 1];
};

console.log(solution(input));