์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ฆฌ์กํธ
- spring
- ์ฐ์ ์์ํ
- ์น๊ฐ๋ฐ
- ๋ชจ๋ฐ์ผ์ฑํ๋ก๊ทธ๋๋ฐ
- ์ดํญ๊ณ์
- ํ๋ก๊ทธ๋๋ฐ
- ์ฝ๋ฉ
- ์คํ๋ง
- ์น๊ฐ๋ฐ๊ธฐ๋ก
- ํ์ด์ฌ
- ์ฝ๋ฉํ ์คํธ
- ์ปด๊ณต์
- ๊ฐ๋ฐ์
- ๋ฐฑ์ค1436
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก ํธ์ค๋
- ์ปด๊ณต
- ๋ฐฑ์คํ์ด
- ๋ฆฌ์กํธ๋ค์ดํฐ๋ธ
- ๊ทธ๋ฆฌ๋
- ์๋ฃ๊ตฌ์กฐ
- ChatGPT
- SSE
- ๋ฐฑ์๋
- ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ
- ๋จ์ํ ์คํธ
- boj11653
- ์ปดํจํฐ๊ณตํ
- ๋ฐฑ์ค
- Today
- Total
๐ป๐ญ๐ง๐
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๋ฌธ์ด ๊ฐ๋ฅํ๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 18258 : ํ 2 (Python) (0) | 2023.09.20 |
---|---|
BOJ 11866: ์์ธํธ์ค ๋ฌธ์ 0 (Python) (0) | 2023.09.19 |
BOJ11653: ์์ธ์๋ถํด (Python) (0) | 2023.09.03 |
BOJ 2178: ๋ฏธ๋ก ํ์ (Python) (1) | 2023.03.14 |
BOJ 1926 : ๊ทธ๋ฆผ (Python) (0) | 2023.03.13 |