21921 : ๋ธ๋ก๊ทธ#
์๊ฐ์ ํ |
๋ฉ๋ชจ๋ฆฌ์ ํ |
์ ๋ต๋น์จ |
---|---|---|
1์ด |
512MB |
40.744% |
input : ์์ํ์ง n์ผ,x์ผ / 1~n์ผ์ฐจ ๋ฐฉ๋ฌธ์์ split output : x์ผ ๋์ ๋ค์ด์จ ์ต๋ ๋ฐฉ๋ฌธ์์ ์ถ๋ ฅ. 0 = โSADโ / ๊ธฐ๊ฐ
x์ผ๋์ ์ต๊ณ ๋ผ๋ ๊ฒ์ x๊ธธ์ด๋งํผ ๋ฉ์ด๋ฆฌ์ ๋ฐฉ๋ฌธ์์๊ฐ ์ ์ผ ํฐ ๊ฒ์ ๋งํ๋ ๊ฒ์ผ๋ก ๋ณด์. ๊ทธ๋๊น ๋ค ์๋ผ์ ํด์ผํ๋์ง? ๊ทผ๋ฐ 250000์ธ๋ฐ ์์ ํ์์ผ๋ก ํ๋ฉด ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๊ณ , ๊ทธ๋ฆฌ๋๋ก ํด์ผํ ๋ฏ. ๊ทผ๋ฐ ์์ ํ์์ด ์ ์ผ ๋ง๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ
์๊ฐ์ด๊ณผ#
๋์ ํฉ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๊ณ์๋ฌ๋ค. O(n*x)
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋์ ํฉ์ ์ฌ์ฉํ๋ฉด O(n)
์ ์๊ฐ๋ณต์ก๋๋ก ์ถ์์ํฌ ์ ์๋ค. ๊ธฐ์กด์ ์์ x
์ผ์ฉ์ ํ์ ๋ฐฐ์ด sum์ ๊ณ์ฐํ๋ฏ๋ก ๋ฐ๋ณต๊ณ์ฐ์ผ๋ก ์๊ฐ์ด ๋ง์ด ์์๋๋ค. ์์ํ๋๋ก n์ ๋ฒ์ฃผ๊ฐ ํผ์ผ๋ก ์ต์ ํ๊ฐ ํ์ํ๋ค. sum์ ์ฌ์ฉํ์ง ์์ผ๋ฉด์ ๋จ์ ๋ง๋บ์
์ผ๋ก ๊ตฌ๊ฐํฉ
์ ๊ตฌํ ์ ์๊ฒ ๋ณ๊ฒฝํ์ด์ผ ํ๋ค.
python#
import sys, os
problem_num = "21921"
path = os.getcwd() + f"\\txt\\{problem_num}" + ".txt"
sys.stdin = open(path, "r")
input = sys.stdin.readline
def find_max_visit(n, x, visitors):
if max(visitors) == 0:
print("SAD")
else:
cumulative_sum = [0] * (n + 1)
for i in range(n):
cumulative_sum[i + 1] = cumulative_sum[i] + visitors[i]
max_visit = 0
hash_table = {}
for i in range(n - x + 1):
subarray_sum = cumulative_sum[i + x] - cumulative_sum[i]
if subarray_sum > max_visit:
max_visit = subarray_sum
hash_table[subarray_sum] = 1
elif subarray_sum == max_visit:
hash_table[subarray_sum] += 1
print(max_visit)
print(hash_table[max_visit])
n, x = map(int, input().split())
visitors = list(map(int, input().split()))
find_max_visit(n, x, visitors)
SAD