ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ - (6) ์์ฃผ ๋์ค๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์
๐์์ ๋ฌธ์
: 1๋ณด๋ค ํฐ ์์ฐ์ ์ค 1๊ณผ ์๊ธฐ ์์ ์ ์ ์ธํ ์์ฐ์๋ก๋ ๋๋์ด๋จ์ด์ง์ง ์๋ ์์ฐ์
#๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ : ์๊ฐ๋ณต์ก๋ O(X)
def is_prime_numder(x):
for i in range(2,x):
if x % i == 0:
return False # ์์ ์๋
return True # ์์์
์ฝ์๋ ๊ฐ์ด๋ฐ ์ฝ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์นญ์ ์ด๋ฃจ๊ธฐ ๋๋ฌธ์
๊ฐ์ด๋ฐ ์ฝ์(์ ๊ณฑ๊ทผ)๊น์ง๋ง ํ์ธํ๋ฉด ๋ชจ๋ ์ฝ์๋ฅผ ๊ตฌํ ์ ์๋ค
# ๊ฐ์ ๋ ์์ ํ๋ณ ์๊ณ ๋ฆฌ์ฆ : ์๊ฐ๋ณต์ก๋ O(N^0.5)
# ์ ๊ณฑ๊ทผ์ ๊ทธ๋ฅ x ** 0.5 ๋ก ํด๋ ๋จ
import math
def is_prime_number(x):
for i in range(2, int(math.sqrt(x))+1):
if x%i == 0:
return False
return True
ํ๋์ ์์ ๋ํด์ ์์์ธ์ง ์๋์ง ํ๋ณํ๋ ๋ฐฉ๋ฒ
-> ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ
- N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์์๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ
1. 2๋ถํฐ N๊น์ง์ ๋ชจ๋ ์์ฐ์๋ฅผ ๋์ดํ๋ค.
2. ๋จ์ ์ ์ค์์ ์์ง ์ฒ๋ฆฌํ์ง ์์ ๊ฐ์ฅ ์์ ์ i๋ฅผ ์ฐพ๋๋ค.
3. ๋จ์ ์ ์ค์์ i์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๋ค. (i ์ ์ธ)
4. ๋์ด์ ๋ฐ๋ณตํ ์ ์์ ๋๊น์ง 2,3๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
array = True for i in range(n+1)] #๋ชจ๋๊ฐ ์์์ธ ๊ฒ์ผ๋ก ์ด๊ธฐํ
for i in range(2, n ** 0.5 +1):
if array[i] == True:
j = 2
while i * j <= n:
array[i*j] = False
j += 1
for i in range(2, n+1):
if array[i]
print(i, end='')
๐ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ
: ๋ฆฌ์คํธ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ ๋ ๋ ๊ฐ์ ์ ์ ์์น๋ฅผ ๊ธฐ๋กํ๋ฉด์ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ
ex. ํน์ ํ ํฉ์ ๊ฐ์ง๋ ๋ถ๋ถ ์ฐ์ ์์ด ์ฐพ๊ธฐ
( ํฉ์ด M์ธ ๋ถ๋ถ ์ฐ์ ์์ด์ ๊ฐ์๋ฅผ ๊ตฌํ์์ค ) M =5, [ 1 2 3 2 5 ]
1. ์์์ ๊ณผ ๋์ ์ด ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค.
2. ํ์ฌ ๋ถ๋ถ ํฉ์ด M๊ณผ ๊ฐ๋ค๋ฉด, ์นด์ดํธํ๋ค.
3. ํ์ฌ ๋ถ๋ถ ํฉ์ด M๋ณด๋ค ์๋ค๋ฉด, end๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
4. ํ์ฌ ๋ถ๋ถ ํฉ์ด M๋ณด๋ค ํฌ๋ค๋ฉด, start๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
5. ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผใน ํ์ธํ ๋๊น์ง 2๋ฒ๋ถํฐ 4๋ฒ๊น์ง์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
# n : ๋ฐ์ดํฐ ๊ฐ์, m : ์ฐพ๊ณ ์ ํ๋ ๋ถ๋ถํฉ
n = 5
m = 5
data = [1, 2, 3, 2, 5]
count, interval_sum, end = 0
for start in range(n):
while interval_sum < m and end < n:
interval_sum += data[end]
end += 1
if interval_sum == m:
count += 1
interval_sum -= data[start]
๐๊ตฌ๊ฐ ํฉ
: ์ฐ์์ ์ผ๋ก ๋์ด๋ N๊ฐ์ ์๊ฐ ์์ ๋ ํน์ ๊ตฌ๊ฐ์ ๋ชจ๋ ์๋ฅผ ํฉํ ๊ฐ์ ๊ณ์ฐํ๋ ๋ฌธ์
[left, right] ๊ตฌ๊ฐ์ ํฌํจ๋ ๋ฐ์ดํฐ๋ค์ ํฉ์ ์ถ๋ ฅํด์ผ ํจ
*์ ๋์ฌ ํฉ : ๋ฐฐ์ด์ ๋งจ ์๋ถํฐ ํน์ ์์น๊น์ง์ ํฉ์ ๋ฏธ๋ฆฌ ๊ตฌํด ๋์ ๊ฒ
์ ๋์ฌ ํฉ์ ๋ค ๊ตฌํด๋์ผ๋ฉด ๊ตฌ๊ฐ ํฉ์ P[right] - P[left - 1] ์ด๋ค.
n = 5
data = [10, 20, 30, 40, 50]
# ์ ๋์ฌ ํฉ
sum_value = 0
prefix_sum = [0]
for i in data:
sum_value += i
prefix_sum.append(sum_value)
# ๊ตฌ๊ฐ ํฉ
left = 3
right = 4
print(prefix_sum[right] - prefix_sum[left-1])