일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Python
- 백준
- pypy3
- 프로그래머스
- C#강의
- 누적합
- 합 구하기
- 완전탐색
- 소수찾기
- 파이썬
- popleft
- Java
- spring
- appendleft
- 인프런
- python3
- 소수판별
- 브루투포스
- 1일1솔
- mvc
- 연관관계
- BFS
- DP
- 그리디 알고리즘
- LCM
- JPA
- unity
- 우선순위큐
- c#
- deque
Archives
- Today
- Total
jae_coding
(백준 알고리즘 문제풀이) 21919번 소수 최소 공배수 본문
반응형
문제
문제 접근
- 소수를 탐색하는 함수를 구현한다.
- 소수라면 prime 리스트에 deque를 이용하여 추가시킨다.
- 소수가 존재하지 않는다면 -1을 출력한다.
- 만약 소수가 존재한다면 pop을 두번해서 최소 공배수를 구하는 공식 (x * y / 최대공약수)을 이용하여 소수의 리스트가 1이 될때까지 반복한다.
코드
import sys, math
from collections import deque
input = sys.stdin.readline
def is_prime(num):
if num == 1:
return False
if num % 2 == 0:
if num == 2:
return True
return False
for i in range(3, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
n = int(input())
a = list(map(int, input().split()))
prime_num = deque()
for i in a:
if is_prime(i):
prime_num.appendleft(i)
if prime_num:
for i in range(len(prime_num)-1):
if len(prime_num) >= 2:
x = prime_num.popleft()
y = prime_num.popleft()
prime_num.appendleft(x * y // math.gcd(x, y))
print(prime_num.pop())
else:
print(-1)
반응형
'알고리즘 문제 > 수학(math)' 카테고리의 다른 글
(백준 알고리즘 문제풀이) 1747번 소수 & 팰린드롬 (0) | 2022.07.29 |
---|---|
(백준 알고리즘 문제풀이) 9613번 GCD합 (0) | 2022.07.28 |
(백준 알고리즘 문제풀이) 21920번 서로소 평균 (0) | 2022.07.28 |
(백준 알고리즘 문제풀이) 4134번 다음 소수 (0) | 2022.07.27 |
(백준 알고리즘 문제풀이) 11653번 소인수분해 (0) | 2022.07.27 |
Comments