/*
 문제
 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.
 
 입력
 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.
 
 출력
 첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.
 
 */
import Foundation
let inputCount = readLine().map{Int($0)!}!
var inputNum = readLine()!.components(separatedBy: " ").map{Int($0)!}

if inputCount == 1 {
    print(inputNum[0]*inputNum[0])
} else {
    let even = (inputNum.count / 2)
    inputNum = inputNum.sorted()
    if inputNum.count % 2 == 0 {
        print(inputNum[even] * inputNum[even - 1])
    } else {
        print(inputNum[even - 1] * inputNum[even + 1])
    }
}

알고리즘 문제를 많이 풀어봐야 겠다고 느낀 문제..

 

문제를 보고 무슨뜻인지 잘 이해가 안되서 한참을 쳐다봤다 ㅋㅋㅋ

해당 풀이 방법은 이렇게 수행된다

 

1. 약수의 갯수가 1개이면 고민할 필요도 없이 해당 값을 제곱하여 출력하면 된다

2. 약수의 갯수가 2개 이상이라면 입력받은 배열을 정렬하고,[ 갯수 / 2 ] 를 하여 배열의 중간값위치를 구한다!

3. 약수의 갯수가 짝수 라면 중간값의 계산한 [ 인덱스의 값 * 이전 인덱스의 값 ] 을 하여 구한다!

4. 약수의 갯수가 홀수 라면 중간인덱스의 [ 이전 값 * 이후 값 ] 을 수행하여 구한다!

+ Recent posts