[백준] 21919번 소수 최소 공배수

거북이·2023년 3월 20일
0

백준[실버3]

목록 보기
75/92
post-thumbnail

💡문제접근

  • 중복된 소수가 나올 수 있다. 이 경우를 고려하지 않으면 출력 초과 오류가 발생하게 된다.
  • 처음에 출력 초과가 발생해서 무엇이 문제인지 확인하고자 질문게시판을 참고했는데 다음 반례가 나와있어서 어디가 문제인지 알 수 있었다.

📌 테스트케이스

입력

5
2 2 2 2 2

출력

2

  • 즉, 소수 2가 5번이 있다고 해서 32를 출력하는 것이 아니라 2를 출력해야 AC를 받는다. 그러려면 중복을 제거하는 방법인 set()를 사용해야한다.

💡코드(메모리 : 40608KB, 시간 : 332ms)

import sys
input = sys.stdin.readline

N = int(input())
arr = set(map(int, input().strip().split()))

is_prime = [True] * 1000001
is_prime[0] = False
is_prime[1] = False
for i in range(2, len(is_prime)):
    if is_prime[i]:
        for j in range(i*i, len(is_prime), i):
            is_prime[j] = False

result = 1
for i in arr:
    if is_prime[i]:
        result *= i

if result == 1:
    print(-1)
else:
    print(result)

💡소요시간 : 20m

0개의 댓글