์ฝ”ํ…Œ

ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ - (6) ์ž์ฃผ ๋‚˜์˜ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

sueeee-e 2025. 2. 6. 10:47

๐Ÿ“์†Œ์ˆ˜ ๋ฌธ์ œ

: 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])