https://www.acmicpc.net/problem/1806
์์ด๋์ด
1. ๋ถ๋ถํฉ ์ฌ์ฉ
- ๋ถ๋ถํฉ์ ๋ํด ๊ฐ๋จํ ์๊ธฐํด๋ณด๋ฉด 0 ~ N๊น์ง์ ํฉ์ ๋ฏธ๋ฆฌ ๊ตฌํด๋๊ณ ํฉ์ ์ฐจ((0 ~ b๊น์ง ํฉ) - (0 ~ a๊น์ง ํฉ))๋ฅผ ํตํด a๋ถํฐ b๊น์ง ์์ ํฉ์ ๋น ๋ฅด๊ฒ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ทธ๋์ for๋ฌธ์ ์ฌ์ฉํด์ ๊ธธ์ด๊ฐ 1์ผ ๋, 2์ผ ๋... N์ผ ๋ ๋ถ๋ถํฉ์ ๊ฐ์ ๊ตฌํด๋ณด๋ฉฐ S๊ฐ์ด ๋๋ ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋๋ก ์ฝ๋๋ฅผ ์งฐ๋ค. ๋น์ฐํ๊ฒ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ด๋ค. ์๋ง ๊ธธ์ด๊ฐ ๊ธด ๊ฒฝ์ฐ ๋๋ฌธ์ธ ๊ฑฐ ๊ฐ๋ค.
- ๊ณ ๋ฏผ ๊ณ ๋ฏผํ๋ค ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๋ฅผ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ํ์๋ค.
2. ํฌ ํฌ์ธํฐ
- ๋ค์ ๋ณด๋ฉด ์ดํด๊ฐ ๊ฐ์ง๋ง ์ฒ์ ๋ดค์ ๋๋ ํฌ ํฌ์ธํฐ๋ ์๊ฐ์ ๋ชปํ๋ค. ์ด๋ป๊ฒ ํ๋ฉด ํฌ ํฌ์ธํฐ๋ฅผ ๋ ์ฌ๋ฆด ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค. ์งง์ ์๊ฐ์ ํ์ด ํํธ์ธ ๊ฑฐ ๊ฐ๊ธด ํ๋ค.
- ํฌ ํฌ์ธํฐ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์๋ฉด ์ดํ ํ์ด ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ถ๋ถํฉ์ ์ฌ์ฉํ์ง ์๊ณ ํฌ ํฌ์ธํฐ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ ์ฒด ์ฝ๋
import sys
N, S = map(int, input().split())
array = [int(x) for x in sys.stdin.readline().rstrip().split()]
left = 0
right = 0
length = 100000
temp_sum = array[0]
while left <= right:
if temp_sum >= S:
length = min(length, right - left + 1)
temp_sum -= array[left]
left += 1
else:
right += 1
if right < N:
temp_sum += array[right]
else:
break
if length == 100000:
print(0)
else:
print(length)
์ฝ๋ ์ค๋ช
left = 0
right = 0
length = 100000
temp_sum = array[0]
while left <= right:
if temp_sum >= S:
length = min(length, right - left + 1)
temp_sum -= array[left]
left += 1
else:
right += 1
if right < N:
temp_sum += array[right]
else:
break
๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ๋ถ๋ถํฉ์ด S๋ฅผ ๋์ผ๋ฉด left๋ฅผ ํ ์นธ ์ฎ๊ฒจ์ ํฉ์ ์ค์ฌ๋ณด๊ณ
์๋๋ผ๋ฉด right๋ฅผ ํ ์นธ ์ฎ๊ฒจ์ S๋ฅผ ๋๋์ง ํ์ธํด๋ณด๋ฉด ๋๋ค.
right๊ฐ N๊น์ง ๊ฐ๊ฑฐ๋ left๊ฐ right๋ฅผ ๋๊ธฐ๋ฉด ์ข ๋ฃ ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ถ๋ถํฉ์ด S๋ฅผ ๋๊ธธ ๋ ๊ธฐ์กด์ ์ ์ฅ๋ ๊ธธ์ด(length)์ ํ์ฌ ๊ธธ์ด(right - left + 1)๋ฅผ ๋น๊ตํด์ ์์ ๊ฐ์ ์ ์ฅํ๋ค.
์ถ๋ ฅ์์ ํฉ์ ๋ง๋๋ ๊ฒ ๋ถ๊ฐ๋ฅํ๋ฉด 0์ ์ถ๋ ฅํ๋ผ ํ์์ผ๋ฏ๋ก
length๊ฐ 100000์ด๋ฉด(if temp_sum >= S ๊ตฌ๋ฌธ์ด ์คํ ์๋ ๊ฒฝ์ฐ) 0์ ์ถ๋ ฅํ๊ณ
์๋๋ผ๋ฉด length๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1644 ์์์ ์ฐ์ํฉ (python ํ์ด์ฌ) (0) | 2022.07.31 |
---|---|
[๋ฐฑ์ค] 9466 ํ ํ๋ก์ ํธ (python ํ์ด์ฌ) (0) | 2022.07.31 |
[๋ฐฑ์ค] 1504 ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (python ํ์ด์ฌ) (0) | 2022.07.28 |
[๋ฐฑ์ค] 12100 2048(easy) (python ํ์ด์ฌ) (0) | 2022.07.25 |
[๋ฐฑ์ค] 15654 N๊ณผ M(5) (python ํ์ด์ฌ) (0) | 2022.07.13 |