반응형
백준 9020 골드바흐의 추측 in python
https://www.acmicpc.net/problem/9020
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # n이하의 숫자들 중 소수 찾기 def prime_list(n): sieve = [True] * n m = int(n ** 0.5) for i in range(2, m + 1): if sieve[i] == True: for j in range(i+i, n, i): sieve[j] = False return [i for i in range(2, n) if sieve[i] == True] # n이하의 소수들 중 합이 n def sosu(n): li=prime_list(n) idx = max([i for i in range(len(li)) if li[i]<=n/2]) for i in range(idx,-1,-1): for j in range(i,len(li)): if li[i]+li[j]==n: return [li[i],li[j]] for _ in range(int(input())): n=int(input()) print(" ".join(map(str,sosu(n)))) | cs |
코드설명
1. prime_list function
2. sosu function
n이하의 소수들 중 합이 n이어야 하며 그 차이가 가장 작은 것을 return해야 한다.
따라서 찾은 소수들 중 max(n/2보다 작은 수) 부터 합이 n이 되는 수를 찾는다.
예를 들어 n=100일 때 li의 결과는
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 이다.
이 때, 50(=100/2)보다 작은 수 중 가장 큰 수인 47부터 합을 찾지 않고 2부터 합을 찾으면 그 결과는 3과 97이 된다.
반응형
'코딩테스트 연습 > 백준' 카테고리의 다른 글
[백준] 2798번 : 블랙잭 in python 파이썬 코드 & 설명 (0) | 2019.10.11 |
---|---|
[백준] 1002번 : 터렛 in python 파이썬 코드 및 설명 (2) | 2019.10.10 |
[백준] 3053번 : 택시 기하학 in 파이썬 쉽게 풀어보기 (0) | 2019.09.30 |
[백준] 4153번 : 직각삼각형 in 파이썬 쉽게 풀어보기 (0) | 2019.09.29 |
[백준] 3009번 : 네 번째 점 in 파이썬 쉽게 풀어보기 (0) | 2019.09.27 |