BOJ 17103: 골λλ°ν νν°μ (Python)
λ¬Έμ
https://www.acmicpc.net/problem/17103
17103λ²: 골λλ°ν νν°μ
첫째 μ€μ ν μ€νΈ μΌμ΄μ€μ κ°μ T (1 ≤ T ≤ 100)κ° μ£Όμ΄μ§λ€. κ° ν μ€νΈ μΌμ΄μ€λ ν μ€λ‘ μ΄λ£¨μ΄μ Έ μκ³ , μ μ Nμ μ§μμ΄κ³ , 2 < N ≤ 1,000,000μ λ§μ‘±νλ€.
www.acmicpc.net
μ½λ
#μλΌν μ€ν
λ€μ€μ 체
array = list[1000000]
a = [False, False] + [True]*(999999)
for i in range(2,1000000):
if a[i]:
for j in range(2*i, 1000000, i):
a[j] = False
t = int(input())
for i in range(t):
n = int(input())
sum = 0
x = n//2
y = n//2
if x%2==0:
if a[x] and a[y]:
if x+y == n:
sum+=1
x-=1
y+=1
while(x>1):
if a[x] and a[y]:
sum+=1
x-=2
y+=2
print(sum)
νμ΄
μ΄ λ¬Έμ λ μλΌν μ€ν λ€μ€μ 체λ₯Ό μ¬μ©νμ¬ μμ νμ μ ν΄μΌ μκ° μ΄κ³Όκ° λ¨μ§ μλλ€.
μλΌν μ€ν λ€μ€μ 체
β‘οΈ λ§ κ·Έλλ‘ μ²΄μ²λΌ μμκ° μλ μλ€μ κ±°λ₯΄λ κ²μ΄λ€.
- λ°°μ΄μ μνλ μ«μκΉμ§ μ°¨λ‘λλ‘ μ«μλ₯Ό λ΄λλ€. ex) 100κΉμ§μ μμλ₯Ό ꡬνκ³ μΆλ€λ©΄ λ°°μ΄μ 0,1,2,3,4,...,100μ λ΄λλ€.
- forλ¬ΈμΌλ‘ 0λΆν° 100κΉμ§ λλ©΄μ ν΄λΉ μ«μκ° μμμΌ κ²½μ° μ΄ μ«μμ λ°°μλ€μ λͺ¨λ μμ λ©΄ λλ€.
- κ·Έλ¬κΈ° μν΄μλ 0,1μ Falseλ‘, λλ¨Έμ§ μλ€μ Trueλ‘ μ΄κΈ°νλ₯Ό νλ€.
- 0,1μ μ²μλΆν° False μ΄λ―λ‘ forλ¬Έ ν¨μ€
- 2λΆν° True μ΄λ―λ‘ 2μ λ°°μλ€μ λͺ¨λ μμ€λ€. (Falseλ‘ λ³κ²½νλ€.)
- λ¨λ κ²μ μμ λΏμ΄λ€.
골λλ°ν νν°μ ꡬνλ λ²
N μ΄ 20μ΄λΌκ³ κ°μ ν λ Nμ 2λ‘ λλ 10μ κΈ°μ€μΌλ‘ 2μ© μ°¨μ΄κ° λλ μμ΄μ λ§λ λ€. κ·Έλ¬λ©΄ νλ μ μΌλ‘ μ΄μ κ²κ³Ό κ°μ΄ ν©μ΄ NμΈ μμ΄ κ΅¬μ±λλ€. μ¬κΈ°μ λλ xλ₯Ό μ€κ°κ°μ μΌνΈμΈ 3,5,7,9λ‘, yλ₯Ό μ€κ°κ°μ μ€λ₯ΈνΈμΈ 11,13,15,17 λ‘ λμλ€.
N/2 κ° μ§μμ΄λ©΄ xλ N/2-1 λ‘, yλ N/2+1 λ‘ λκ³ μμνλ€.
Why?
μ§μμΈ N/2 μμλΆν° 2μ© μ°¨μ΄κ° λλλ‘ μ«μλ₯Ό ꡬμ±νλ©΄ λͺ¨λ μ«μκ° μ§μκ° λλλ° μ§μλ 2λ₯Ό μ μΈνκ³ λ λͺ¨λ μμκ° μλλ―λ‘ κ³¨λλ°ν νν°μ μ 쑰건μ λΆν©νμ§ μκΈ° λλ¬Έμ΄λ€.
β οΈ κ·Έλ°λ° μ΄λ κ² νλ©΄ N=4 μΌ λ x=2, y=2 μ²λΌ μμ λͺ¨λ μκ° μ§μμ΄μ§λ§ λͺ¨λ μμλΌμ 골λλ°ν νν°μ 쑰건μ λΆν©νμ¬λ 무μλκΈ° λλ¬Έμ μλμ κ°μ΄ λ°λ‘ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμλ€.
if x%2==0:
if a[x] and a[y]: # N=4 μΌ λ (2,2) λ 골λλ°ν νν°μ
μ ν΄λΉνλ―λ‘ μμΈ μ²λ¦¬λ₯Ό ν΄μ€λ€.
if x+y == n:
sum+=1
x-=1
y+=1
κ·Έλ¦¬κ³ xκ° 1λ³΄λ€ μμμ§κΈ° μ κΉμ§ xλ 2μ© μ€μ΄κ³ , yλ 2μ© λ리면μ x,y κ° λͺ¨λ μμμΌ λ sum+=1 μ νμ¬ κ³¨λλ°ν νν°μ μ κ°μλ₯Ό ꡬνλ©΄ λλ€.
while(x>1):
if a[x] and a[y]:
sum+=1
x-=2
y+=2
print(sum)
β μλΌν μ€ν λ€μ€μ μ²΄λ‘ aλΌλ λ°°μ΄μ μμλ§μ Trueλ‘ λ¨κ²¨λμμΌλ―λ‘ μμ κ°μ ifλ¬Έμ΄ κ°λ₯νλ€.