1. ๋ฌธ์ ์ค๋ช ๐
๋ฌธ์ ์ค๋ช
์ด ์ด๋ ค์์ ๋ถ์ฐ ์ค๋ช
์ ํ๊ฒ ๋ค.
N๊ฐ์ ์ธํ๋ฆฌ์ ๋๋น๊ฐ X์ธ ๋ฃฐ๋ฌ๊ฐ ์๋ค. ์ธํ๋ฆฌ์ ๊ฒฝ์ฐ ๋๋น๋ 1๋ก ๊ณ ์ ์ด๊ณ , ๋์ด๋ง 1์ฐจ์ ๋ฐฐ์ด ํ์์ผ๋ก ์ฃผ์ด์ง๋ค. ๋น์ ์ ๋ฃฐ๋ฌ๋ฅผ ํ์ฉํ์ฌ ํ์ธํธ๋ฅผ ์น ํ ๊ฒ์ธ๋ฐ, ๋๋น๊ฐ X์์ผ๋ก, X ๋๋น ๋ด์ ์ธํ๋ฆฌ๋ ํ ๋ฒ์ ์น ํ๊ฒ ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
(1) ๋ฃฐ๋ฌ์ ๋ถ๋ถ์ด ํ๊ณต์ ๋ฟ์ผ๋ฉด ์๋๋ค.
์ผ์ชฝ๊ณผ ๊ฐ์ด ์ผ๋ จ์ ์ธํ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค๋ฉด, ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ ํ ๋๋ฆฌ ์ ์ชฝ๋ง ๋กค๋ฌ๋ฅผ ๋๋ ค ์น ํ ์ ์๋ค๋ ๋ง์ด๋ค. ์ฆ ๋กค๋ฌ ๋๋น X ๋ด์ ์ ์ผ ์์ ์ธํ๋ฆฌ๊ฐ ์์น ์ ๊ธฐ์ค์ด ๋๋ค.
(2) ์น ํ๋ฐ๋ ๋ ์น ํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋กค๋ฌ์ ๋๋น๊ฐ 3์ผ ๋, ์ฒ์ ๋ง๋ฑ๋จ๋ฆฌ๋ ๊ตฌ๊ฐ์์๋ ์ต๋๋ก ์น ํ ์ ์๋ ๋์ด๊ฐ 1์ผ ๊ฒ์ด๋ค.
๋กค๋ฌ๋ฅผ ํ ์นธ ์ฎ๊ธฐ๋ฉด ์ด๋จ๊น? 2๊ฐ ๋ฐ๋ก ๋กค๋ฌ๋ก ์น ํ ์ ์๋ ์ต๋ ๋์ด๊ฐ ๋๋ค. ์ด๋, ์น ํ ๊ณณ์ ๋ ์น ํด๋ ๋๋ค๋ ๊ฒ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ์กฐ๊ฑด์ ์ฐธ๊ณ ํ์ฌ, ์น ํด์ง์ง ์์ ๋ถ๋ถ์ ์ต์๊ฐ๊ณผ, ํ์ํ ์ต์ํ์ ๋กค๋ฌ์ง ํ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: Sliding Window
, Monotone Queue
์๋๋ผ๋ฉด, ํฐ ์ ๊ทผ ๋ฐฉ์ ๊ฐ์๋ฅผ ์ค๋ช ํ๊ณ ์ธ์ธํ๊ฒ ์ ๊ทผ ํ์ํ ๋ฐ, ์ด๋ฒ ๋ฌธ์ ๋ ์ฌ์ ์ ์์์ผํ ๋ด์ฉ์ด ์์ด ๋จผ์ ๊ทธ๊ฒ์ ๋ํด ๋งํ๊ณ ํฐ ๊ฐ์๋ฅผ ์ค๋ช ํ๊ฒ ๋ค.
(1) ์ฌ์ ์ง์: ์ฌ๋ผ์ด๋ฉ ๋จ์กฐ ํ์ ๋ํด
Monotone Queue(๋จ์กฐ ํ)๋ ํ์์ ๊ฐ์ด ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊พธ์คํ ์ ์ง๋๋ ํ๋ฅผ ๋งํ๋ค. ์ด๊ฑธ ํ์ฉํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
์ด๋ฐ ์์ผ๋ก ๋์ ๊ฒฐํฉํด ํธ๋ ๋ฌธ์ ์ ํ์ด ๊ฝค ๋๋๋ฐ, ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ฆฌํฌ๋งํ ์ฉ์ด๊ฐ ์์ด์ ํ์๋ ์ฌ๋ผ์ด๋ฉ ๋จ์กฐ ํ
๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํด๋น ๊ฐ๋
์ ๋ํ ์์ธํ ์ค๋ช
์ ๋ฐ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
https://dalcheonroadhead.tistory.com/570
๊ฐ๋จํ ์ฌ๋ผ์ด๋ฉ ๋จ์กฐ ํ
์ ๊ฐ๋
์ ๋ํด ์ค๋ช
ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- Deck์ผ๋ก ๊ตฌํํ๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์์ง์ด๋ฉฐ ๋ฐ์์ผ ํ๋ ์ ๊ท๊ฐ์ ๋ฌด์กฐ๊ฑด deck์ ๊ผฌ๋ฆฌ๋ก ์ง์ด ๋ฃ๋๋ค.
- 1๋ฒ ๊ท์น์ ์งํค๋ฉด์ deck ์์ ๋น๋ด๋ฆผ์ฐจ์ ํน์ ๋น์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ง์์ผ์ผ ํ๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๊ฐ ์ง๋๊ฐ ๊ฐ์ deck์์๋ ์ ๊ฑฐ ํ๋ค.
- 1๋ฒ ๊ท์น์ ์งํค๋ฉด์ 2๋ฒ ๊ท์น์ ์งํค๋ ค๋ฉด, ํ์ ๊ผฌ๋ฆฌ๊ฐ๊ณผ ์ ๊ท๊ฐ ๊ฐ์ ๋์๊ด๊ณ ๋น๊ต๊ฐ ํ์ํ๋ค. ๊ฐ๋ น ๋จ์กฐํ ์์ ์ค๋ฆ ์ฐจ์์ผ๋ก ์ ์ง์ํฌ ์๋๋ผ๋ฉด
queue.rear() > new
๋ผ๋ฉด new๊ฐ ํ์ ๊ผฌ๋ฆฌ์ ๋ค์ด๊ฐ๋ฉด ์ค๋ฆ์ฐจ์์ด ๋์ง ์์ผ๋ฏ๋ก, queue์ rear๋ฅผ ์ ๊ฑฐํ๋ค.
(์ด ๊ณผ์ ์ rear <= new ๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.)queue.rear() <= new
๋ผ๋ฉด new๊ฐ ํ์ ๊ผฌ๋ฆฌ์ ๋ค์ด๊ฐ๋ ์ค๋ฆ์ฐจ์์ด ์ ์ง๋๋ฏ๋ก ๊ทธ๋๋ก ๋ฃ๋๋ค.
์ด๊ฒ ์ ํ์ํจ? ๐ค
๊ฐ๋ น ๋ฌธ์ ์์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์์ ์ต์๊ฐ ํน์ ์ต๋๊ฐ์ ๊ตฌํ๋ผ๋ ์๊ตฌ์ฌํญ์ด ๋์ฌ ๊ฒฝ์ฐ ํ์ํ๋ค. ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ฐ๋ ๊ฒ์ด ์์ ํ์์ ๋นํจ์จ์ ์ค์ด๊ณ , ์๋์ฐ์ ๋จธ๋ฆฌ ๊ฐ๊ณผ ๊ผฌ๋ฆฌ๊ฐ๋ง ๊ฐฑ์ ํ๋ฉฐ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํจ์ธ๋ฐ, ๊ตฌ๊ฐ ๋ด ์ต์ ํน์ ์ต๋๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์์ ํ์ํ๋ค๋ฉด ํด๋น ๊ธฐ์ ์ ์ฐ๋ ์๋ฏธ๊ฐ ์๋ค.
์ด ๊ฒฝ์ฐ ์ฌ๋ผ์ด๋ฉ ๋จ์กฐ ํ
๋ฅผ ํ์ฉํด ํ ๊ตฌ๊ฐ ๋ด์ ์ต์ ํน์ ์ต๋๊ฐ์ ๋จ๊ธด๋ค๋ฉด ์๋ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ๋๊ฐ์ด ๊ตฌ๊ฐ์ ๋จธ๋ฆฌ์ ๊ผฌ๋ฆฌ๊ฐ๋ง ๊ฐฑ์ ํด ๋๊ฐ๋ฉฐ ํจ์จ์ ์ผ๋ก ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฒ ๋ฌธ์ ์์๋ ๋กค๋ฌ๊ฐ ์น ํ๋ ค๋ ๊ตฌ๊ฐ ๋ด์์ ์ธํ๋ฆฌ ์ค ์ต์ ๋์ด์ธ ๊ฒ์ ๊ตฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๋จ์กฐํ๋ฅผ ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค๋ฉด, ํ ๊ตฌ๊ฐ ๋ด์ ์ต์ ๋์ด๊ฐ ๋ฌด์์ธ์ง ์ ์ ์๋ค. ์ด์ ์ฌ์ ์ง์์ ๊ณต๋ถ ํ์ผ๋, ๋ฌธ์ ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ด๋ณด๊ฒ ๋ค.
(2) ์น ํ ๋ถ๋ถ์ ๋ค์ ์น ํ ์ ์๋ค๋ ์กฐ๊ฑด์ ์ด๋ป๊ฒ ๊ตฌํ?
๊ฒฐ๋ก : ์ค์ ๊ตฌํ์ ์์น ์ด ์ค๋ณต๋์ง ์๊ฒ ํ๋ค.
์ด๋ฅผ ํ ๋ฉด, ํ์ฌ ์กฐํ ์ค์ธ ์ธํ๋ฆฌ๊ฐ ์ค๋ณต ์์น ๋ ๊ฒ ๊ฐ์ผ๋ฉด ๊ทธ๊ฒ์ ์น ํ์ง ์๊ณ ๊ทธ ์ด์ ์ธํ๋ฆฌ๋ค๋ง ์์น
ํด๋น ๋ฌธ์ ์์ ๊ฐ์ฅ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ ํ๋ฒ ๋กค๋ฌ๋ก ์น ํ๋๋ผ๋ ๋ค์ ๊ตฌ๊ฐ์์ ๋ ์น ํ ์ ์๋ค๋ฉด, ๋ง์น ์ด ๊ฐ๋ฅํ๋ ์ ์ด๋ค. ๋ฐ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ง์ด๋ค.
์ ์ฒด ์ธํ๋ฆฌ ๋๋น - ์์น ํ ๋ถ๋ถ
์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๋ ค๋ ์
์ฅ์์ ์ด๋ฌํ ์ค๋ณต๋ ์์น ์ ๊ณ์ฐ์ ๋ณต์กํ๊ฒ ๋ง๋ ๋ค. ๊ทธ๋์ ๊ตฌ๊ธ๋ง ํ๋ฉฐ ์ฐพ์๋ธ ๋ฐฉ๋ฒ์ ๋ง์น ํ๊ธฐ ์ง์ ๊น์ง๋ง ์น ํ๊ณ ๋ค์ ๊ตฌ๊ฐ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒ์ด๋ค. ์ด๋ฌ๋ฉด ์ค๋ณต์ด ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ค์ ๊ตฌ๊ฐ์์ ๋ง์น ์ด ๋ ์ง ์๋ ์ง๋ฅผ ์ด๋ป๊ฒ ํ๋จํ ๊ฒ์ธ๊ฐ? ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
"๊ตฌ๊ฐ์ ์ฎ๊ฒผ์ ๋, ๊ตฌ๊ฐ ๋ด ์ต์๊ฐ์ด ๋ณํ๋ฉด, ๋ฐ๋ ๊ตฌ๊ฐ๋ถํฐ๋ ์ด์งํผ ์๋ก์ด ์ต์ ๋์ด๋ก ๋ค์ ์น ํด์ผํ๋ฏ๋ก ์น ํ์ง ์๋๋ค."
๋ฌ๋ฆฌ ๋งํ๋ฉด, "๊ตฌ๊ฐ์ ์ฎ๊ฒผ์ ๋, ๊ตฌ๊ฐ ๋ด ์ต์๊ฐ์ด ๋ณํ๋ฉด, ์ด์ ์น ํ์ง ์์ ๋ถ๋ถ์ ์์์ ~ ํ ๊ตฌ๊ฐ ์ง์ ๊น์ง ์ด์ ์ต์ ๋์ด๋ก ์น ํ๋ค." ๋ผ๋ ๋ง์ด ๋๋ค. ๋ง๋ก ํ๋ฉด ํท๊ฐ๋ฆฌ๋ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ๊ฒ ๋ค.
๋ค์๊ณผ ๊ฐ์ ์์ ๊ฐ ์กด์ฌํ๋ค๊ณ ํ ๋, ์ต์ด ๊ตฌ๊ฐ์ ์น ํ ์ ์๋ ๋์ด๋ 5
์ผ ๊ฒ์ด๋ค.
์์ผ๋ก ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ํ์ ํ์ง๋ง ์์ง ์น ํ์ง ์์๋ค! ์๋ํ๋ฉด ๊ตฌ๊ฐ์ ์ต์๋์ด๊ฐ ๋ฐ๋๋ ์๊ฐ์ ํ ๋ฒ์ ์น ํด๋ฒ๋ฆฌ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ผ๋จ ๋ค์ ๊ตฌ๊ฐ์ผ๋ก ๋์ด๊ฐ์.
์์ง 5๊ฐ ์ต์ ๋์ด์ด๋ค. ๋ ๋ค์ ๊ตฌ๊ฐ์ผ๋ก ๋์ด๊ฐ์.
์ด์ ์ต์ ๋์ด๊ฐ 6์ด ๋์๋ค! ์ต์ ๋์ด๊ฐ ๋ฐ๋์์์ผ๋ก, ์ดํ ๋ถํฐ๋ 6์ผ๋ก ๋ค์ ์น ํด์ผํ๋ค. ์ฐ๋ฆฌ๋ ์ค๋ณต์ ํผํ๊ธฐ ์ํด index = 2 ์ธ ๋ถ๋ถ์ ์น ํ์ง ์๊ณ , ์ด์ ์ ์น ํ์ง ์์ ๋ถ๋ถ์ธ 0๋ถํฐ 1๊น์ง๋ฅผ ์ด์ ์ต์ ๋์ด์ธ 5๋ก ์น ํ๋ฉด ๋๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ๊ณ์ ์งํํด๋ณด์. ๋ค์ ๊ตฌ๊ฐ์ผ๋ก ๊ฐ๋๋ ์ด๋ฒ์ ๋ฐ๋ก ๋์ด๊ฐ 4๋ก ๋ฐ๋์๋ค. ์ด๋ฌ๋ฉด ์์ง ์น ํ์ง ์์ ์์์ ์ธ index = 2๋ถํฐ ์ต์ ๋์ด๊ฐ ๋ฐ๋๊ธฐ ์ง์ index = 4๊น์ง 6์ผ๋ก ์น ํ๋ฉด ๋๋ค.
์ด๋ฐ์์ผ๋ก ์๋์ฐ๋ฅผ ๊ณ์ ์์ง์ด๋ฉด, ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ต๋ํ ์น ํ ์ ์๋ค.
๊ทธ๋ผ ์ด์ ๋ค์๊ณผ ๊ฐ์ ๊ถ๊ธ์ฆ์ด ์๊ธธ ๊ฒ์ด๋ค.
(3) ๊ตฌ๊ฐ์ ์ต์ ๋์ด๊ฐ ๋ฐ๋๋ ์์ ์ ์ธ์ ์ผ๊น?
2๊ฐ์ง ์๊ฐ์ด ์๋ค.
- (a) ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ฎ๊ฒผ์ ๋, ์ ๊ท ์ฝ์ ๊ฐ์ด ์ต์๊ฐ์ด ๋๋ ๊ฒฝ์ฐ (์ต์๊ฐ์ด ์์์ง)
- (b) ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ฎ๊ฒผ์ ๋, ์ต์ข๋จ ๊ฐ์ด ์ญ์ ๋์ด 2๋ฒ์งธ๋ก ์์๋ ๊ฐ์ด ์ต์๊ฐ์ด ๋๋ ๊ฒฝ์ฐ (์ต์๊ฐ์ด ์ปค์ง)
์์ ์์์์ ์ฒซ๋ฒ์งธ ์์น ํ๋ ์๊ฐ์ด b์ ํด๋นํ๊ณ , ๋ ๋ฒ์งธ ์์น ํ๋ ์๊ฐ์ด a์ ํด๋นํ๋ค. ์์ ๊ฐ์ ์๊ฐ์ด ์ค๋ฉด (์ด์ ์ ์์น ํ์ง ์์ ๋ถ๋ถ์ ๊ธธ์ด) * (์ด์ ์ต์ ๋์ด) ๋ก ์์น ํ ๋ถ๋ถ์ ๊ตฌํ๋ฉด ๋๋ค.
(4) ๋กค์งํ ํ์ ๊ตฌํ๊ธฐ
์ต์ ๋์ด๊ฐ X๋๋น ์ด์ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ค๊ฐ?
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ, index = 5์ 4๋ฅผ ๋ง๋ 0์์ 4๊น์ง ์ธํ๋ฆฌ๊ฐ ๋์ด 3์ผ๋ก ์น ํด์ง ๊ฒ์ด๋ค. ๋ฃฐ๋ฌ์ ๋๋น๊ฐ 3์์ผ๋ก 2
๋ฒ ์น ํ๊ฒ ๋ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ ์ต์ ๋์ด๊ฐ ๊ฐ์ ๊ตฌ๊ฐ์ด 0์์ X์ ๊ธธ์ด์ผ ๋๋ ๋กค์ง 1๋ฒ, X+1 ~ 2X์ ๊ธธ์ด์ผ ๋๋ ๋กค์ง 2๋ฒ ... ์ด๋ฐ ์์ผ๋ก ๊ท์น์ฑ์ด ์๊ธธ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์์น ํด์ผํ๋ ๊ตฌ๊ฐ์ ๊ธธ์ด๋ฅผ N์ผ๋ก ๋๋์์ ๋ ๋ชซ + 1๋ก ํ๋ฉด ๊ณ์ฐ์ด ํธํ ๊ฒ์ด๋ค. ๊ณ์ฐ ์์ผ๋ก ํ๋ฉด
\[ \frac{์์น ํด์ผ ํ๋ ๊ธธ์ด - 1}{N} + 1\]
์ด๋ค.
์ด? ๊ทผ๋ฐ ์ ์์น ํด์ผ ํ๋ ๊ธธ์ด์ -1์ ํด์ค๊น? ๐ง
๋๋์ ์ด ๋ฑ ๋ง์๋จ์ด์ง๋ ์๊ฐ ๋ํ ์ ๋๋ก ๊ณ์ฐํ๊ธฐ ์ํด์ ์ด๋ค. ๋ง์ฝ ์น ํด์ผํ๋ ๋ถ๋ถ์ ๊ธธ์ด๊ฐ X๋ผ๋ฉด ๋กค์ง์ ํ ๋ฒ๋ง ํ๋ฉด ๋์ง๋ง, ๋๋์ + 1๋ก ๊ณ์ฐ ์์๋ 2๋ฒ์ผ๋ก ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ๋ถ์์ -1์ ํด์ฃผ์ด ๋๋์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ๋ ์ผ๋ถ๋ฌ ๋๋์ด ๋จ์ด์ง์ง ์๊ฒ ๋ง๋ ๋ค.
(5) ์์ธ ์ฒ๋ฆฌ: ๋ชจ๋ ์ธํ๋ฆฌ ๋์ด๊ฐ ๊ฐ์ ๋
์ฐ๋ฆฌ๋ ์ต์๋์ด๊ฐ ๋ฐ๋๋ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ฝ๋๋ฅผ ์งฐ์์ผ๋ก ๋ชจ๋ ์ธํ๋ฆฌ ๋์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์์ธ์ฒ๋ฆฌ ํด์ค์ผ ํ๋ค. ๋์ด ๋ฐฐ์ด์ ๋งจ ๋์ 0์ ํ๋ ์ถ๊ฐํ๋ค. ์ด๋ฌ๋ฉด, ๋งจ ๋ง์ง๋ง์๋ ๋ฌด์กฐ๊ฑด 0์ ๋ง๋์ ๊ทธ ์ ๊น์ง ์ ์น ํด์ง ๋ถ๋ถ์ ์ ๋ถ ๋ง์ง๋ง ๋์ด๋ก ์น ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
(6) ์ฝ๋์ ํฐ ํ๋ฆ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ๋จ์กฐ ํ๋ก ๊ตฌํ ํ ๋งจ ์ฒ์ ๊ตฌ๊ฐ์ ๊ฐ์ ๋ํ ๊ณ์ฐ์ ํ๋ค. (์ด๊ธฐ ์ธํ
)
(ํด๋น ๋ถ๋ถ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด์ผ ๋ค์๋ถํฐ ํ ์นธ์ฉ ์์ง์ด๋ ๊ณ์ฐ์ ํ ์ ์๋ค.) - ์ต์ด ๊ตฌ๊ฐ์ ์ต์ ๋์ด, ์ ์น ํด์ง ๋ถ๋ถ์ ์์์ ๋ณ์, ๋กค์ง ํ์ ๋ณ์, ์ ์ฒด ์ธํ๋ฆฌ ๋๋น(๋์ ํฉ)๋ฅผ ๊ตฌํ๋ค.
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ํ ์นธ์ฉ ์์ง์ธ๋ค.
- ์ ๊ท๊ฐ์ ์ฝ์ ํ๊ณ , ์ต์ ๋์ด๊ฐ ๋ฐ๋์๋์ง ์ฒดํฌํ๋ค. (๋ฐ๋์์ ์, ์์น ์๋ ์ด์ ๊ตฌ๊ฐ์ ๊ธธ์ด x ์ด์ ์ต์ ๋์ด)
- ์ต์ข๋จ ๊ฐ์ ์ญ์ ํ๊ณ ์ต์ ๋์ด๊ฐ ๋ฐ๋์๋์ง ์ฒดํฌํ๋ค. (๋ฐ๋์์ ์, ์์ ๊ฐ์ด ๊ณ์ฐ)
3. ์ฝ๋ ์๊ฐ ๐
import java.io.*;
import java.util.*;
public class Main {
/*
* b2905 ํ์ค์ด์ ์ธํ๋ฆฌ
* 1. ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์ด๊ธฐ๊ฐ ์ธํ
(0~X ์ฌ์ด ์ต์๊ฐ์ deque ๋งจ ์๋ก)
*
* 2. ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์์ง์ด๋ฉฐ ์ ๊ท ๊ฐ ์ฝ์
์ผ๋ก ๊ตฌ๊ฐ ๋ด ์ต์๊ฐ์ด ๊ฐฑ์ ๋์์ ๊ฒฝ์ฐ,
* ์ด์ ์ ์น ํ ๊ณณ๋ถํฐ i-1(์ง์ )์์น๊น์ง ์ด์ ์ต์ ๋์ด๋ก ์น ํ๊ธฐ
*
* 3. ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์์ง์ด๋ฉฐ, ์ต์๊ฐ์ด ๊ตฌ๊ฐ์ ๋ฒ์ด๋๋ฉด์ ์ต์๊ฐ์ด ๊ฐฑ์ ๋์์ ๊ฒฝ์ฐ,
* ์ด์ ์ ์น ํ ๊ณณ๋ถํฐ, ๊ตฌ๊ฐ์ ๋ฒ์ด๋ ํด๋น ๊ฐ๊น์ง ์ต์ ๋์ด๋ก ์น ํ๊ธฐ
*
* 4. ์ต์๋์ด๊ฐ ๊ตฌ๊ฐ์ ์ฌ๋ฌ๋ฒ ์์ง์์๋ ๊ฐฑ์ ๋์ง ์๋ ๊ฒฝ์ฐ์ ๋ํ ์์ธ์ฒ๋ฆฌ
* (n=12, x=4, 3333 3333 3333) -> ๊ฐฑ์ ์๋ ๊ธธ์ด/x + 1 = ๋กค๋ฌ์ง ํ ํ์
* */
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
int [] values = new int [N+1];
ArrayDeque<Fence> adq = new ArrayDeque<>(); // ์ฌ๋ผ์ด๋ฉ ์๋์ฐ -> ํ์ฌ ๋กค๋ฌ๊ฐ ์์ง์ผ ๊ตฌ๊ฐ
long area = 0;
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
values[i] = Integer.parseInt(st.nextToken());
area += values[i];
}
// 1. ์ด๊ธฐ ์ธํ
-> ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๊ตฌ๊ฐ๋ด ๊ฐ๋ค ์ค ์ ํจํ ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ง
// (์ ํจํ ๊ฐ = ๊ตฌ๊ฐ ๋ด ์ต์๋์ด๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฐ)
for (int i = 0; i < X; i++) {
Fence now = new Fence(i, values[i]);
while (!adq.isEmpty() && adq.peekLast().v > now.v) adq.pollLast();
adq.add(now);
}
// for(Fence temp : adq){
// System.out.print(temp.v+" ");
// }
// System.out.println();
// 2. ๊ณ์ฐ
int recent_height = adq.peek().v; // ๋ง์ง๋ง์ผ๋ก ์ธํ๋ฆฌ ์น ํ ํ, ๊ฐฑ์ ํ ํ ๋ด ์ต์๋์ด
int roller_cnt = 0; // ๋กค๋ฌ์งํ ํ์
int idx = 0; // ๋ง์ง๋ง์ผ๋ก ์ธํ๋ฆฌ ์น ํ ํ, ๊ฐฑ์ ํ ์ ์น ํ ๋ถ๋ถ์ ์์์
for (int i = X; i <= N; i++) {
// System.out.printf("๊ณ์ฐ ์ --AREA: %d, ROLLER_CNT: %d recent-height: %d, idx: %d --"
// + "ํ์ฌ index: %d\n",area,roller_cnt, recent_height, idx, i);
Fence now = new Fence(i, values[i]);
while (!adq.isEmpty() && adq.peekLast().v > now.v) adq.pollLast();
adq.add(now);
// for(Fence temp : adq){
// System.out.print(temp.v+" ");
// }
// System.out.println();
if(!adq.isEmpty() && adq.peek().v != recent_height){
roller_cnt += (i-1-idx)/X + 1;
area -= (long) (i - idx) *recent_height;
// System.out.printf("(2)์ ๊ท ๊ฐ ์ฝ์
ํ๋ฉฐ ์ต์๊ฐ ๊ฐฑ์ -- ๋น ์ ธ ๋๊ฐ๋ ๊ฐ: %d \n", (i-idx)*recent_height);
recent_height = adq.peek().v;
idx = i;
}
if(!adq.isEmpty() && adq.peek().i <= i-X){
Fence past = adq.poll();
if(!adq.isEmpty() && adq.peek().v != past.v){
roller_cnt += (past.i - idx)/X + 1;
area -= (long) (past.i - idx + 1) * recent_height;
// System.out.printf("(3)์ต์ข๋จ ์ญ์ ํ๋ฉฐ ์ต์๊ฐ ๊ฐฑ์ -- ๋น ์ ธ ๋๊ฐ๋ ๊ฐ: %d \n", (past.i - idx + 1)*recent_height);
recent_height = adq.peek().v;
idx = past.i + 1;
}
}
}
System.out.println(area);
System.out.println(roller_cnt);
}
}
class Fence {
int i;
int v;
public Fence(int i, int v){
this.i = i;
this.v = v;
}
}
์ฝ๋๋ฅผ ๋ณด๋ฉด ์์น ์ด ์๋ ๊ตฌ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ตฌํ ๋, ์ ๊ท ๊ฐ ์ฝ์
์์ ์ ์ผ ์ค๋๋ ๊ฐ ์ญ์ ์์ ๊ณ์ฐ์ด ๋ค๋ฅด๋ค.
์ ๊ท ๊ฐ ์ฝ์
์ผ๋ก ์ธํด ์ต์๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ์ต์๊ฐ์ด ๋จ์กฐํ์ front์ ์์นํ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๋ ์์์ ๋ถํฐ ํด๋น ์ต์๋์ด๋ฅผ ๋ง๋๊ธฐ ์ด์ ๊น์ง์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ฉด ๋๋ฏ๋ก, ์ต์๊ฐ์ index์ธ i์ ์ง์ ์ธ i-1๊น์ง์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๋ฉด ๋๋ค.
(์ฃผ์!) ๋จ์กฐํ ๋ด ์ต์ข๋จ ๊ฐ ์ญ์ ํ ์ต์ ๋์ด๊ฐ ๋ฌ๋ผ์ ธ์ ์์น ๋ฒ์๋ฅผ ์ ํ ๋,
๋จ์กฐ ํ์ front.index -1 ์ ์น ํ๋ ๊ตฌ๊ฐ์ ๋์ผ๋ก ์ ์ ํ๋ฉด ์๋๋ ์ด์ !
์ญ์ ํ ์ต์๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ์ต์ ๋์ด๊ฐ ๋ ๋จ์กฐ ํ์ front์ index๊ฐ ์์น ํด์ผํ๋ ๋ฒ์์ ์งํ index๋ผ๊ณ ๋ณด์ฅํ๊ธฐ ์ด๋ ต๋ค.
ํด๋น 6,7,8 ๊ตฌ๊ฐ์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๊ฐ ์กด์ฌํ๋ค๋ฉด, ์ต์ ๋์ด๋ 4์ด๋ค. ํ์นธ ์์ง์ฌ๋ณด๋ฉด,
์ต์ ๋์ด๊ฐ 6์ด๋ค. ํ์ง๋ง 6์ 4์ ๋ฐ๋ก ์งํ index๊ฐ ์๋์ ์ ์ ์๋ค. ๋ฐ๋ผ์ ์ด์ ์ต์๋์ด์ index๋ฅผ ํฌํจํ์ฌ ์์น ํด์ผํ ๊ธธ์ด๋ฅผ ์ธก์ ํ๋ค.
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
"์ค๋ณตํด์ ์์น ํ ์ ์๋ค."๋ผ๋ ์กฐ๊ฑด์ด ๋ ์ด๋ ค์์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๊ณต๋ถํ ๋ค ๋ค์ ์ค์ค๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค. ํด๋น ํ์ด ์ฝ๋๊ฐ C++์ด๋ผ ๋ด ๊ฒ์ผ๋ก ๋ด์ฌํ ํ๋๋ฐ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ค. ๋ค์์ ๋ด๊ฐ ์ฐธ๊ณ ํ๋ ๊ฐ์ฌํ ๋ธ๋ก๊ทธ ๋ค์ด๋ค.
https://jaimemin.tistory.com/832
https://mingmeng030.tistory.com/63