BOJ[1037] - 약수 by JavaScript
약수
문제
언어
- 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));