๋ฌธ์ ๐ต๐ซ
ํ๋ ์ด์์ ์ฐ์๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ ์์ฐ์๋ค์ด ์๋ค. ๋ช๊ฐ์ง ์์ฐ์์ ์๋ฅผ ๋ค์ด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- 3: 3(ํ ๊ฐ์ง)
- 41 : 2+3+4+7+11+13 = 11+13+17 = 41(์ธ ๊ฐ์ง)
- 53 : 5+7+11+13+17 = 53(๋ ๊ฐ์ง)
ํ์ง๋ง ์ฐ์๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ ์์ฐ์๋ค๋ ์๋๋ฐ, 20์ด ๊ทธ ์์ด๋ค. 7+13์ ๊ณ์ฐํ๋ฉด 20์ด ๋๊ธฐ๋ ํ๋ 7๊ณผ 13์ด ์ฐ์์ด ์๋๊ธฐ์ ์ ํฉํ ํํ์ด ์๋๋ค. ๋ํ ํ ์์๋ ๋ฐ๋์ ํ ๋ฒ๋ง ๋ง์ ์ ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์, 3+5+5+7๊ณผ ๊ฐ์ ํํ๋ ์ ํฉํ์ง ์๋ค.
์์ฐ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ด ์์ฐ์๋ฅผ ์ฐ์๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ด ํ๐ฆท
# 1644. ์์์ ์ฐ์ํฉ
import sys
input = sys.stdin.readline
N = int(input())
prime = []
arr = [True for _ in range(N+1)]
arr[0] = arr[1] = False
for i in range(2, N+1):
if arr[i]:
prime.append(i)
# i์ 2๋ฐฐ ์ด์ ๋ถํฐ๋ ๋ค false...
for j in range(2*i, N+1, i):
arr[j] = False
result = start = end = 0
while end <= len(prime):
each = sum(prime[start:end])
if each == N:
result += 1
end += 1
elif each < N:
end += 1
else:
start += 1
print(result)
๊ณจ๋ 3 ์๋ํ๊ณ ๋ ์์ฒญ ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋์ง๋ง ๋น๊ต์ ๋น ๋ฅธ ์๊ฐ์ ์์๋ฅผ ๊ตฌํ๊ณ ๋ ํฌํฌ์ธํฐ๋ฅผ ์จ์ผ ํ๊ธฐ ๋จ๋ฌธ์ ๋๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ ์ ์๊ณ ์์ด์ผ ํ๋ค... ๊ทธ๋์ ์ด๊ฑฐ์ ์ ํ ๋ฌธ์ ๋ก ์์ ๊ตฌํ๋ ๋ฌธ์ ์ถ์ฒํ๋ค!!!!
์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฐ๋ ๋ค โ๏ธ
- ์๋ผํ ์ค ํ ๋ค์ค์ ์ฒด(์์ ํ๋ณ ์๊ณ ๋ฆฌ์ฆ : ์์๋ค์ ๋๋์ผ๋ก ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๊ตฌํํ ์ ์๋ค)
// ์๋ผํ ์คํ
๋ค์ค์ ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ตฌํ๊ธฐ
// ์ฃผ์ด์ง ๋ฒ์ ๋ด์ ์๋ ๊ฐ ์ซ์์ ๋ํด ์ด๊ธฐ์๋ ๋ชจ๋ True์ธ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค
arr = [True for _ in range(N+1)]
// 0๊ณผ 1์ ์์๊ฐ ์๋๋ฏ๋ก False๋ก ๊ฐ์ ์ค์ ํ๋ค
arr[0] = arr[1] = False
// 2๋ถํฐ N๊น์ง์ ๊ฐ ์ซ์์ ๋ํด ์์์ธ์ง ํ๋ณํ๋ค
for i in range(2, N+1):
// ํ์ฌ ์ซ์๊ฐ ์์์ธ ๊ฒฝ์ฐ, ํด๋น ์ซ์๋ฅผ ์์ ๋ชฉ๋ก์ ์ถ๊ฐํ๊ณ ,,,
// ํ์ฌ ์ซ์์ ๋ฐฐ์๋ค์ ๋ชจ๋ False๋ก ์ค์ ํ๋ค... (์ ์ด๋ i๋ฅผ ํฌํจํ๋๊น ์์๊ฐ ์๋๋ค)
if arr[i]:
prime.append(i)
# i์ 2๋ฐฐ ์ด์ ๋ถํฐ๋ ๋ค false...
for j in range(2*i, N+1, i):
arr[j] = False
- ํฌ ํฌ์ธํฐ (๋ฆฌ์คํธ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ ๋ ๋ ๊ฐ์ ์ ์ ์์น๋ฅผ ๊ธฐ๋กํ๋ฉด์ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ ex) ํน์ ํ ํฉ์ ๊ฐ์ง๋ ๋ถ๋ถ ์ฐ์ ์์ด ์ฐพ๊ธฐ )
// ํฌ ํฌ์ธํฐ ๊ตฌํํ๊ธฐ
// ๋ค ๋ํ์ ๊ฒฝ์ฐ N์ด ๋๋ ๊ฒฐ๊ณผ์ ์์, ๋ ์ ์ 0์ผ๋ก ์ด๊ธฐํ
result = start = end = 0
// ๋ ํฌ์ธํฐ๊ฐ ์์์ ๊ธธ์ด๋ณด๋ค ์์๋ ๊ฐ์ ๋์ ์ํ
while end <= len(prime):
// ํ์ฌ ์์๋ถํฐ ๊ธ๊ฐ์ง์ ์์ ํฉ์ ๊ณ์ฐ
each = sum(prime[start:end])
// ํฉ์ด N๊ณผ ๊ฐ๋ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ 1 ์ฆ๊ฐ, ๋ ํฌ์ธํฐ ๋ํ 1 ์ฆ๊ฐ
if each == N:
result += 1
end += 1
// ํฉ์ด N๋ณด๋ค ์๋ค๋ฉด ๋ ํฌ์ธํฐ 1 ์ฆ๊ฐ
elif each < N:
end += 1
// ํฉ์ด N๋ณด๋ค ํฌ๋ค๋ฉด ์์ ํฌ์ธํฐ 1 ์ฆ๊ฐ
else:
start += 1
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] 3์ง๋ฒ ๋ค์ง๊ธฐ(JAVA) (1) | 2024.05.01 |
---|---|
๋ฐฑ์ค 1446. ์ง๋ฆ๊ธธ(๋ค์ต์คํธ๋ผ) (0) | 2023.10.27 |
๋ฐฑ์ค 6603. ๋ก๋(๋ฐฑํธ๋ํน) (0) | 2023.09.29 |
๋ฐฑ์ค 1697. ์จ๋ฐ๊ผญ์ง (1) | 2023.09.20 |
์์ด๊ณผ ์กฐํฉ๐ช (0) | 2023.09.20 |