[๋ฐฑ์ค€] ๊ฒŒ์œผ๋ฅธ ๋ฐฑ๊ณฐ / 10025๋ฒˆ / ํŒŒ์ด์ฌ / Python / Sliding Window / ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ
Algorithm/Baekjoon

[๋ฐฑ์ค€] ๊ฒŒ์œผ๋ฅธ ๋ฐฑ๊ณฐ / 10025๋ฒˆ / ํŒŒ์ด์ฌ / Python / Sliding Window / ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ’กsolutions )

 

๐Ÿ’ฌ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Sliding Window)์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

๐Ÿ’ฌ ๋จผ์ € ์–ผ์Œ ์–‘๋™์ด๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ice ๋ฐฐ์—ด์„ ์ตœ๋Œ€ ํฌ๊ธฐ๋งŒํผ ๋งŒ๋“ค์–ด์ค€๋‹ค. -> ice = [0]*1000001

๐Ÿ’ฌ ์ž…๋ ฅ์„ ์ฃผ์–ด์ง„ ์–‘๋™์ด ์ขŒํ‘œ์— ํ•ด๋‹นํ•˜๋Š” ์–ผ์Œ์˜ ์–‘์„ ๋„ฃ์–ด์ค€๋‹ค.

๐Ÿ’ฌ ์œˆ๋„์šฐ์˜ ๊ณ ์ •๋œ ๋ฒ”์œ„๋ฅผ next = 2*k +1(ํ•œ ์ขŒํ‘œ์—์„œ ์•ž๋’ค๋กœ k๋งŒํผ์”ฉ ๋–จ์–ด์ง€๋Š” ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋ฏ€๋กœ)๋กœ ๋‘๊ณ , for ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค ํ•œ์นธ์”ฉ ์ด๋™ํ•˜๋ฉฐ ๋งจ ๋’ค์— ์žˆ๋Š” ๊ฐ’ ice[i]์€ ์œˆ๋„์šฐ๊ฐ’์—์„œ (+)๋”ํ•ด์ฃผ๊ณ  ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’ ice[i-next]์€ (-)๋นผ์ค€๋‹ค.

๐Ÿ’ฌ window๊ฐ’ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋งˆ๋‹ค answer๋„ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๊ธฐ

 


๐Ÿ“š ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Sliding Window)์ด๋ž€?

์œˆ๋„์šฐ ์ฆ‰ ์ผ์ •ํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ด๊ฒƒ์„ ์ด๋™(sliding) ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ์˜ ์ผ์ • ๋ฒ”์œ„์˜ ๊ฐ’์„ ๋น„๊ตํ• ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
๋งค๋ฒˆ ์ฒ˜๋ฆฌ๋˜๋Š” ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ
๋‚ญ๋น„๋˜๋Š” ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ


๐Ÿ“Œ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ๐Ÿ‘‡

๋ฐฑ์ค€ 2559๋ฒˆ ์ˆ˜์—ด

 

 

๐Ÿ‘จ‍๐Ÿ’ปcode )

import sys

input = sys.stdin.readline
n, k = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
ice = [0]*1000001
for i in range(n):
    ice[arr[i][1]] = arr[i][0]

next = 2*k + 1
window = sum(ice[:next])
answer = window

for i in range(next, 1000001):
    window += (ice[i] - ice[i-next])
    answer = max(answer, window)
print(answer)

 

 

๐Ÿ“Œdescription )

 

10025๋ฒˆ: ๊ฒŒ์œผ๋ฅธ ๋ฐฑ๊ณฐ

์ฒซ ์ค„์— ์ •์ˆ˜ N๊ณผ K๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N์งธ ์ค„๊นŒ์ง€, ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ๊ฐ ์–‘๋™์ด์˜ ์–ผ์Œ์˜ ์–‘์„ ๋‚˜ํƒ€๋‚ด๋Š” gi์™€ ์–‘๋™์ด์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


๋ฌธ์ œ

๋”์šด ์—ฌ๋ฆ„๋‚  ๋™๋ฌผ์›์˜ ๋ฐฑ๊ณฐ ์•จ๋ฒ„ํŠธ๋Š” ๋„ˆ๋ฌด ๋”์›Œ์„œ ๊ผผ์ง๋„ ํ•˜๊ธฐ ์‹ซ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ์‚ฌ์œก์‚ฌ๋“ค์ด ์•จ๋ฒ„ํŠธ์˜ ๋”์œ„๋ฅผ ์‹ํžˆ๊ธฐ ์œ„ํ•ด ์–ผ์Œ์ด ๋‹ด๊ธด ์–‘๋™์ด๋“ค์„ ๊ฐ€์ ธ๋‹ค ์ฃผ์—ˆ๋‹ค. ์•จ๋ฒ„ํŠธ๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฑฐ๋ฆฌ๋งŒ ์›€์ง์ด๊ณ ๋„ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์–ผ์Œ์œผ๋กœ ๋”์œ„๋ฅผ ์‹ํž ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์ž.

์šฐ๋ฆฌ ์•ˆ์€ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ์ƒ๊ฐํ•˜๋ฉฐ, ์ด N(1 ≤ N ≤ 100000)๊ฐœ์˜ ์–ผ์Œ ์–‘๋™์ด๋“ค์ด xi(0 ≤ xi ≤ 1,000,000)์ขŒํ‘œ๋งˆ๋‹ค ๋†“์—ฌ ์žˆ๊ณ  ๊ฐ ์–‘๋™์ด ์•ˆ์—๋Š” gi(1 ≤ gi ≤ 10,000)์”ฉ์˜ ์–ผ์Œ์ด ๋“ค์–ด ์žˆ๋‹ค. ์ผ๋‹จ ์•จ๋ฒ„ํŠธ๊ฐ€ ์ž๋ฆฌ๋ฅผ ์žก์œผ๋ฉด ๊ทธ๋กœ๋ถ€ํ„ฐ ์ขŒ์šฐ๋กœ K(1 ≤ K ≤ 2,000,000) ๋งŒํผ ๋–จ์–ด์ง„ ์–‘๋™์ด๊นŒ์ง€ ๋‹ฟ์„ ์ˆ˜ ์žˆ๋‹ค. ์•จ๋ฒ„ํŠธ๋Š” ์–‘๋™์ด๊ฐ€ ๋†“์—ฌ ์žˆ๋Š” ์ž๋ฆฌ์—๋„ ์ž๋ฆฌ์žก์„ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ์–ผ์Œ ์–‘๋™์ด์˜ ์œ„์น˜๋Š” ๋‹ค๋ฅด๋‹ค.

์•จ๋ฒ„ํŠธ๊ฐ€ ์ตœ์ ์˜ ์ž๋ฆฌ๋ฅผ ๊ณจ๋ž์„ ๋•Œ ์–ผ์Œ์˜ ํ•ฉ์„ ๊ตฌํ•˜์‹œ์˜ค. ์ฆ‰, ์–ผ์Œ๋“ค์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ ์ค„์— ์ •์ˆ˜ N๊ณผ K๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N์งธ ์ค„๊นŒ์ง€, ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ๊ฐ ์–‘๋™์ด์˜ ์–ผ์Œ์˜ ์–‘์„ ๋‚˜ํƒ€๋‚ด๋Š” gi์™€ ์–‘๋™์ด์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์•จ๋ฒ„ํŠธ๊ฐ€ ํƒํ•œ ์ตœ์  ์œ„์น˜๋กœ๋ถ€ํ„ฐ K๋งŒํผ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ ๋‚ด์— ์žˆ๋Š” ์–ผ์Œ๋“ค์˜ ํ•ฉ(์ตœ๋Œ“๊ฐ’)์„ ์ถœ๋ ฅํ•œ๋‹ค.




๋ฐ˜์‘ํ˜•