ํฌ ํฌ์ธํฐ
๋ฆฌ์คํธ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ ๋ 2๊ฐ์ ์ ์์น๋ฅผ ๊ธฐ๋กํ๋ฉด์ ์ฒ๋ฆฌ
ํน์ ํ ํฉ์ ๊ฐ์ง๋ ๋ถ๋ถ ์ฐ์ ์์ด ์ฐพ๊ธฐ
* ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํค๋ฉด ํญ์ ํฉ์ด ๊ฐ์ํ๊ณ ,
๋์ ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํค๋ฉด ํญ์ ํฉ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์
ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
* ๋ฆฌ์คํธ ๋ด ์์์ ์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ, ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
n = 5 # ๋ฐ์ดํฐ์ ๊ฐ์
m = 5 # ์ฐพ๊ณ ์ ํ๋ ๋ถ๋ถํฉ
data = [1, 2, 3, 2, 5] # ์ ์ฒด ์์ด
count = 0
interval_sum = 0
end = 0
# start๋ฅผ ์ฐจ๋ก๋๋ก ์ฆ๊ฐ์ํค๋ฉฐ ๋ฐ๋ณต
for start in range(n):
# end๋ฅผ ๊ฐ๋ฅํ ๋งํผ ์ด๋์ํค๊ธฐ
while interval_sum < m and end < n:
interval_sum += data[end]
end += 1
# ๋ถ๋ถํฉ์ด m์ผ ๋ ๋ฐ์ดํฐ ์ฆ๊ฐ
if interval_sum == m:
count += 1
interval_sum -= data[start]
print(count)
์ ๋ ฌ๋์ด ์๋ ๋ ๋ฆฌ์คํธ์ ํฉ์งํฉ
* ์๊ฐ๋ณต์ก๋ O(N+M) -> ๊ฐ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ฅผ ํ ๋ฒ์ฉ ์ํ
* ๋ณํฉ์ ๋ ฌ๊ณผ ๊ฐ์ ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉ๋๊ณ ์๋ค.
# ์ฌ์ ์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ A์ B ์ ์ธ
n, m = 3, 4
a = [1, 3, 5]
b = [2, 4, 6, 8]
# ๋ฆฌ์คํธ A์ B์ ๋ชจ๋ ์์๋ฅผ ๋ด์ ์ ์๋ ํฌ๊ธฐ์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ ์ด๊ธฐํ
result = [0] * (n+m)
i, j, k = 0, 0, 0
# ๋ชจ๋ ์์๊ฐ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ๋ด๊ธธ ๋๊น์ง ๋ฐ๋ณต
while i < n or j < m:
# ๋ฆฌ์คํธ B์ ๋ชจ๋ ์์๊ฐ ์ฒ๋ฆฌ๋์๊ฑฐ๋, ๋ฆฌ์คํธ A์ ์์๊ฐ ๋ ์์ ๋
if j >= m or (i < n and a[i] <= b[j]):
# ๋ฆฌ์คํธ A์ ์์๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ก ์ฎ๊ธฐ๊ธฐ
result[k] = a[i]
i += 1
# ๋ฆฌ์คํธ A์ ๋ชจ๋ ์์๊ฐ ์ฒ๋ฆฌ๋์๊ฑฐ๋, ๋ฆฌ์คํธ B์ ์์๊ฐ ๋ ์์ ๋
else:
# ๋ฆฌ์คํธ B์ ์์๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ก ์ฎ๊ธฐ๊ธฐ
result[k] = b[j]
j += 1
k += 1
# ๊ฒฐ๊ณผ ๋ฆฌ์คํธ ์ถ๋ ฅ
for i in result:
print(i, end=' ')
'๐ค > ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ทธ๋ํ ์ด๋ก (Graph) (0) | 2022.07.18 |
---|---|
์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (Shortest Path Algorithm) (0) | 2022.04.14 |
๋์ ๊ณํ๋ฒ (Dynamic Programming) (0) | 2022.03.21 |
์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ (Binary Search Algorithm) (0) | 2022.02.10 |
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ (Sorting Algorithm) (0) | 2022.02.04 |