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 |