import sys
input = sys.stdin.readline
def get_prim_number(input_Num):
    last_num = input_Num
    visited = [False for _ in range(last_num+1)]
    visited[0] = True
    visited[1] = True

    result = []
    for num in range(2,last_num+1):
        if not visited[num]:
            result.append(num)
            for new_num in range(2*num,last_num+1,num):
                visited[new_num] = True
    return result
N = int(input())

arr = list(map(int,input().split()))
result = []
max_num = max(arr)
prim_set = get_prim_number(max_num)
for val in arr:
    if val in prim_set:
        result.append(val)

if len(result)>0:
    answer = 1
    result = set(result)
    for prim in result:
        answer*=prim
    print(answer)
else:
    print(-1)

 

 

이 문제는 소수를 구하고, 소수가 있으면, SET에 추가를 해주고,

 

전부 판별을 한 뒤에, 

 

아무것도 없으면 -1 을,

 

그리고 최소공배수를 출력해주면 된다.

 

이 문제에서 많이 틀렸던 이유는

 

중복되는 소수가 온다는걸 깜빡했었다.

 

즉 2 2 3 5 7 이라하면, 전체를 그냥 곱하기만 하면, 420이 된다.

 

그러나 실제 최소공배수는 210이므로,

 

이러한 점을 주의하기만 하면 되는 문제였다.

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ/백준] 21921 블로그  (0) 2021.06.10
[BOJ/백준] 21920 서로소 평균  (0) 2021.06.10
[BOJ/백준] 21918 전구  (0) 2021.06.10
[BOJ/백준] 17470 배열 돌리기 5  (0) 2021.06.10
[BOJ/백준] 20924 트리의 기둥과 가지  (0) 2021.06.07

+ Recent posts