๋ฌธ์
๋ฐฑ์ค - ์ฝ์, ๋ฐฐ์์ ์์ 2
https://www.acmicpc.net/step/18
[4948]๋ฒ ๋ฅดํธ๋ ๊ณต์ค
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/4948
๋ฒ ๋ฅดํธ๋ ๊ณต์ค: ์์์ ์์ฐ์ n์ ๋ํ์ฌ, n๋ณด๋ค ํฌ๊ณ 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ ์ ์ด๋ ํ๋ ์กด์ฌํ๋ค.
๋ฌธ์ ๋ฅผ ๊ทธ๋๋ก ์ฝ์ด์ผ ๋๋ค.
- n๋ณด๋ค๋ (ํฌ๊ณ ) 2n๋ณด๋ค (์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.)
- n๋ณด๋ค๋ ((ํฌ๊ณ 2n๋ณด๋ค ์๊ฑฐ๋) ๊ฐ์์ผ ํ๋ค.)
2๋ฒ์ผ๋ก ์๊ฐํ๊ณ ํ์๋๋ฐ 1๋ฒ์ด์๋ค.
์ฆ ์์ฐ์ n์ด ์ฃผ์ด์ก์๋ n < ... <= 2n๋ฅผ ๋ง์กฑํ๋ ์์์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
ํ์ด
์ ์ฒดํ์ด๋ ์๋์ ๊ฐ๋ค.
# ์๋ผํ ์คํ
๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ ํ์ด.
from sys import stdin
input = stdin.readline
_max = 123456*2 # ์ฒดํฌ๋ฒ์๊ฐ n๋ถํฐ 2n๊น์ง์ด๋ฏ๋ก max(123,456)์ ๋๋ฐฐ๋งํผ ๋ง๋ค์ด๋ฌ์ผํจ.
primes = [True] * (_max+1)
primes[0] = primes[1] = False
for i in range(2, int(_max**0.5)+1):
if primes[i]:
for j in range(i*i, _max+1, i):
primes[j] = False
def check_primes(num):
cnt = 0
for i in range(num+1, 2*num+1):
if primes[i]:
cnt += 1
return cnt
while True:
n = int(input())
if not n:
break
print(check_primes(n))
๋จ๊ณ๋ณ ํ์ด
_max = 123456*2
primes = [True] * (_max+1)
primes[0] = primes[1] = False
์ฐ์ ์์๋ฅผ ํ๋ณํ๋ ๋ฒ์๊ฐ "n์ด๊ณผ 2n์ดํ" ์ด๋ฏ๋ก, ๋ฆฌ์คํธ๋ฅผ 2n๋งํผ ๋ง๋ค์ด์ค๋ค.
0๋ฒ์งธ์ 1๋ฒ์งธ๋ False๋ก ๋ฏธ๋ฆฌ ์ค์ ํด๋๋ค.
for i in range(2, int(_max**0.5)+1):
if primes[i]:
for j in range(i*i, _max+1, i):
primes[j] = False
๊ทธ ๋ค์ 2๋ถํฐ n์ ์ ๊ณฑ๊ทผ๊น์ง ์ํํ๋ฉฐ i์ ๋ฐฐ์๋ค์ ์ ๊ฑฐํ๋ค.
์์๋ง ๋จ๊ธฐ๋ ๊ณผ์ ์ด๋ค.
+i*2๊ฐ ์๋ i*i๋ถํฐ ์์ํ๋ ์ด์ ?
: ์ฌ์ค i*2๋ก ํด์ค๋ ์๊ด์ ์๋ค. ๋ค๋ง i*2๋ ์ด์ ๋จ๊ณ์์ ์ฒ๋ฆฌ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ i*i๋ก ํด์คฌ๋ค.2*2 = 4, 2*3 = 6 ···, 3*2 = 6 => ์ด๋ฏธ ์ฒ๋ฆฌ๋์์. 3*3 = 9 ··· ์ด๋ฐ์์ผ๋ก ํ๋ฌ๊ฐ๊ธฐ ๋๋ฌธ์.
def check_primes(num):
cnt = 0
for i in range(num+1, 2*num+1):
if primes[i]:
cnt += 1
return cnt
while True:
n = int(input())
if not n:
break
print(check_primes(n))
check_primes๋ ๋ฒ์ ๋ด์ ์์๊ฐ ๋ช ๊ฐ ์๋์ง ์ฒดํฌํ๋ ํจ์๋ค.
๋ต๊ณผ ๊ฐ์ฅ ์ง๊ฒฐ๋๋ ํจ์์ธ ์
์ธ๋ฐ, n๋ถํฐ 2n๊น์ง ์ํํ๋ฉฐ primes[i]๊ฐ True์ธ ๊ฐฏ์๋ฅผ ๋ฐํํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ while๋ฌธ์ ํตํด check_primes(์
๋ ฅ๊ฐ)์ ๋ฐ๋ณตํ๋ค.
์
๋ ฅ๊ฐ์ ๋์ผ๋ก 0์ด ์ฃผ์ด์ง๋ฏ๋ก 0์ด ๋๋ฉด ํ์ถ.
[17103]๊ณจ๋๋ฐํ ํํฐ์
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/17103
๊ณจ๋๋ฐํ์ ์ถ์ธก: 2๋ณด๋ค ํฐ ์ง์๋ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
๋งจ ์ฒซ์งธ์ค์ ํ
์คํธ์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๊ณ , ๋์งธ์ค๋ถํฐ ์ง์ N์ด ์ฃผ์ด์ง๋ค.
N์ด ๋ช๊ฐ์ ๊ณจ๋๋ฐํ ํํฐ์
์ ๊ฐ์ง๊ณ ์๋์ง ์์๋ด๋ฉด ๋๋ค. ๋จ, ์ค๋ณต์ ๋ถ๊ฐ๋ฅ.
ํ์ด
from sys import stdin
input = stdin.readline
def make_primes(limit) -> list:
primes = [True] * (limit+1)
primes[0] = primes[1] = False
for i in range(2, int(limit**0.5)+1):
if primes[i]:
for j in range(i*i, limit+1, i):
primes[j] = False
return primes
primes = make_primes(1000000)
def check_primes(number):
"""
checked๋ฅผ ์์ ๋ ๋์ ์ฃผ์ด์ง ์์ ์ ๋ฐ๋งํผ๋ง ์ฒดํฌํ๊ธฐ.
์ด์ฐจํผ i์ number-i ๋ชจ๋ ์ฒดํฌํ๊ธฐ๋๋ฌธ์ ์ค์ง์ ์ธ ์ฒดํฌ ๋ฒ์๋ ๊ฐ๋ค.
ํ์ง๋ง ์ฝ๋์์ ๋ฒ์๋ ์์ ์ ๋ฐ๊น์ง์ด๋ฏ๋ก ์ค๋ณต์ํ์ ์์.
"""
cnt = 0
for i in range(2, number//2 + 1):
if primes[i] and primes[number-i]:
cnt += 1
return cnt
T = int(input())
for _ in range(T):
print(check_primes(int(input())))
๋จ๊ณ๋ณ ํ์ด
def make_primes(limit) -> list:
primes = [True] * (limit+1)
primes[0] = primes[1] = False
for i in range(2, int(limit**0.5)+1):
if primes[i]:
for j in range(i*i, limit+1, i):
primes[j] = False
return primes
primes = make_primes(1000000)
make_primes๋ก ์์๋ง ๋ํ๋ด๋ ๋ฆฌ์คํธ primes๋ฅผ ์์ฑํด์ค๋ค.
์ฃผ์ด์ง๋ ์ ์ N์ ๋ฒ์๋ 2 <= N <= 1000000์ด๋ฏ๋ก 1000001๊ฐ์ ๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ง๋ ์
์ด๋ค.
def check_primes(number):
cnt = 0
for i in range(2, number//2 + 1):
if primes[i] and primes[number-i]:
cnt += 1
return cnt
T = int(input())
for _ in range(T):
print(check_primes(int(input())))
check_primes๋ก ํด๋น๋๋ ์์์ ๊ฐฏ์๋ฅผ ์ฒดํฌํ๋ค.
์ด๋ค ์ N = ํฉ1 + ํฉ2 ์ผ๋, ํฉ1 ๋๋ ํฉ2๋ ๋ฌด์กฐ๊ฑด N์ ์ ๋ฐ๊ฐ ์ดํ์ ์กด์ฌํ๋ค.
๋น์ฐํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก 2๋ถํฐ N//2๊น์ง primes๋ฅผ ์ฒดํฌํ๋ฉด ๋๋ค.
๋ง์ฝ i๋ ์์๊ณ , N-i๋ ์์๋ผ๋ฉด ํฉ1๊ณผ ํฉ2 ๋ชจ๋ ์์์ธ ์
์ด๋ฏ๋ก ๊ณจ๋๋ฐํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
์ด ์กฐ๊ฑด์ ๋ง์กฑํ ๋๋ง๋ค cnt๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ๊ณ , ์ํ๊ฐ ๋๋๋ฉด ํด๋น cnt๊ฐ์ ๋ฐํํ๋ค.
์ ๊ณผ์ ์ T๋งํผ ๋ฐ๋ณตํ๋ค.
[13909]์ฐฝ๋ฌธ ๋ซ๊ธฐ
๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/13909
๊ฐ์์ค์๋ N๊ฐ์ ์ฐฝ๋ฌธ๊ณผ N๊ฐ์ ์ฌ๋์ด ์กด์ฌํ๋ค.
1๋ถํฐ N๊น์ง, ๊ฐ ์์ ๋ฐฐ์๋ฒ์งธ ์ฐฝ๋ฌธ์ด ์ด๋ ค์์ผ๋ฉด ๋ซ๊ณ /๋ซํ์์ผ๋ฉด ์ฐ๋ค.
์๋ฅผ ๋ค์ด ํ์ฌ 3๊ฐ์ ์ฐฝ๋ฌธ์ด ์๊ณ 3๋ช ์ ์ฌ๋์ด ์์ ๋,
- 1๋ฒ์งธ ์ฌ๋์ 1์ ๋ฐฐ์์ธ 1,2,3๋ฒ ์ฐฝ๋ฌธ์ ์ฐ๋ค. (1, 1, 1)
- 2๋ฒ์งธ ์ฌ๋์ 2์ ๋ฐฐ์์ธ 2๋ฒ ์ฐฝ๋ฌธ์ ๋ซ๋๋ค. (1, 0, 1)
- 3๋ฒ์งธ ์ฌ๋์ 3์ ๋ฐฐ์์ธ 3๋ฒ ์ฐฝ๋ฌธ์ ๋ซ๋๋ค. (1, 0, 0)
๋ง์ง๋ง์ ์ด๋ ค์๋ ์ฐฝ๋ฌธ์ ๊ฐฏ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค.
ํ์ด
๋ญ๊ฐ ๊ผผ์๊ฐ ์กด์ฌํ ๊ฒ ๊ฐ๊ธด ํ๋๋ฐ ์๋ณด์๋คใ
ใ
ใ
๊ทธ๋์ ๊ณง์ด๊ณง๋๋ก ํ์ด๋ดค๋ค.
# ์ฒซ๋ฒ์งธ ์ฝ๋. ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ!
from sys import stdin
input = stdin.readline
N = int(input())
windows = [0] + [1]*N
for i in range(2, N+1):
for j in range(i, N+1, i):
if windows[j] == 1:
windows[j] = 0
else:
windows[j] = 1
print(sum(windows))
0๋ฒ์งธ ์ฐฝ๋ฌธ์ ํ์ ๋ซํ์์ํ
๋ 0, 1๋ฒ์งธ๋ถํฐ N๋ฒ์งธ๊น์ง๋ 1๋ก ์ด๊ธฐํํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ 2๋ถํฐ N๊น์ง ์ด๋ ค์์ผ๋ฉด ๋ซ๊ณ , ๋ซํ์์ผ๋ฉด ์ด๊ณ , ์ด๋ ค์ ๋ซ, ๋ซ ์ด, ์ด, ๋ฐ๋ณต...
๊ฒฐ๊ณผ๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ์๋ค.
์ญ์๋ ์ถ์ด ์ง๋ฌธ๊ฒ์ํ์ ๋๋ฌ๋ดค๋ค.

ํ๋์จ๋์ด ์ ์ํ ๋ฐฉ๋ฒ.
"1๋ถํฐ 16๊น์ง ์๋ฎฌ๋ ์ด์
์ ๋๋ฆฌ๋ฉด ๊ท์น์ด ๋ณด์ผ๊ฒ๋๋ค."
๋น์ฅ ์คํํด๋ดค๋ค.
from sys import stdin
input = stdin.readline
for N in range(1, 17):
windows = [0] + [1]*N
for i in range(2, N+1):
for j in range(i, N+1, i):
if windows[j] == 1:
windows[j] = 0
else:
windows[j] = 1
print(f"{N}์ ํฉ: {sum(windows)}, ๋ฐฐ์ด:", *windows)

์ ๊ณฑ๊ทผ์ ์ ์ํ์ด ๋ต์ด์๋ค.
์ง์ง ํ์ด
from sys import stdin
input = stdin.readline
N = int(input())
print(int(N**0.5))
์
๋ ฅ๋ฐ์ ์์ ์ ๊ณฑ๊ทผ์ ์ ์ํ์ด ๋ต์ด์๋ค.
๋๋ฌด ๊ฐ๋จํด์ ํ๋ฌดํ๋ค.