Notice
Recent Posts
Recent Comments
Archives
반응형
«   2025/01   »
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 31
Today
Total
01-09 19:59
250x250
관리 메뉴

꿈꾸는 개발자의 블로그

[백준] Python - 21920 서로소 평균 본문

Algorithm/Baekjoon

[백준] Python - 21920 서로소 평균

aldrn29 2022. 9. 16. 22:08

문제 링크

https://www.acmicpc.net/problem/21920

 

21920번: 서로소 평균

첫 번째 줄에 입력될 수들의 개수 $N$이 주어진다. $(2 \le N \le 500,000)$ 두 번째 줄에는 수열 $A$를 이루는 자연수 $A_{i}$ 가 공백으로 구분되어 주어진다. $(2 \le A_{i} \le 1,000,000)$ 수열 $A$에 $X$와 서로

www.acmicpc.net

 

문제 풀이

처음에는 각 수마다 약수를 구해서 서로소(1 이외의 공약수가 없음)인지 비교하여 풀이하려고 했다. 하지만 계속해서 시간초과 ㅠㅠ 결국 파이썬의 math.gcd()를 사용하여 코드를 완성했다... 아래 더보기는 직접 약수를 구해주는 함수를 구현하여 이용한 코드(다른 블로그 도움..)인데, 시간이 더 많이 소요된다. 다음엔 유클리드 호제법을 이용한 최대공약수로도 풀이해봐야겠다! 

 

더보기

 

약수를 구해주는 함수를 구현하여 이용한 코드

n = int(input())
a = list(map(int, input().split()))
x = int(input())
result = 0
cnt = 0

def getDivisor(num) :
    divisorList = []
    for i in range(1, int(num**0.5)+1) :
        if num % i == 0 :
            divisorList.extend([i, num//i])
    divisorList.remove(1)
    return list(set(divisorList))

xList = getDivisor(x)

for num in a :
    for x in xList :
        if num % x == 0 :
            break
    else :
        result += num
        cnt += 1

print(result / cnt)

 

전체 코드

import math

n = int(input())
a = list(map(int, input().split()))
x = int(input())
result = 0
cnt = 0

for num in a :
    if math.gcd(num, x) == 1 :
        result += num
        cnt += 1

print(result / cnt)

 

728x90
728x90
Comments