[๋ฐฑ์ค] ๐ ๋ค์ด์๋ชฌ๋ ๋ฌ์ฑ ๋ฐ Tip
๐ก ๋ค์ด์ ๋ฌ์ฑ
์ฌํด ๋ชฉํ ์ค ํ๋์๋ ๋ฐฑ์ค solved.ac ๋ค์ด์ ํฐ์ด๋ฅผ ๋ฌ์ฑํ๋คโฆ
์์ 100๋ฌธ์ ๋ฅผ ๊ณจ๋ ์์ด ์ฑ์ฐ๊ณ ๋๋ ๋ง์์ด ํธ์ํด์ก๋คโฆ
๊ทผ๋ฐ ์์ด๋ฆฌ ๋๋ถ๋ถ์ ํ๋กํ ๋ฐฐ๊ฒฝ์ ๊ทธ๋ฆผ์ฒด๊ฐ ๋ํ ๊ฐ์์งโฆ ๋ง์๋๋ ๋ฐฐ๊ฒฝ์ด ์๋ค.
๐ก ํ๊ทธ ๋ถํฌ
์ฌ์ค ๋ค์ด์ ํฐ์ด๋ฅผ ๊ฐ๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ โ๋น ๋ฅธโ ๋ฐฉ๋ฒ์ ์ํ์ ํ์ฉํด์ ์ด๋ ค์ด ์ํ๋ฌธ์ ๋ฅผ ํธ๋๊ฒ ์๋๊น ํ๋ค.
์ด๋ ค์ด ์ํ ์ง์์ด ๋ค์ด๊ฐ๋ฉด ๊ตฌํ์ด ๋นก์ธ์ง ์๊ณ ์ฝ๋๊ฐ ์งง์๋ ํฐ์ด๊ฐ ๋์ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฌผ๋ก ๊ทธ๊ฒ ์ฝ๋ค๋๊ฑด ์๋๋ค.
๊ทธ๋ฅ ์ฝ๋ฉ ์ค๋ ฅ์ ํค์ฐ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์ํ ๋ฌธ์ ๋ ํ์ง ์๊ณ ์ฃผ๋ก ๋จ๊ณ๋ณ ๋ฌธ์ ๋ฅผ ํ๋ฉด์,
๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ฌ๋ณด๊ณ ์ถ๊ฐ๋ก ํผ ์ฌ๋์ด ๋ง์ ๋ฌธ์ ๋ค์ ํ์ด๋ณด์๋ค.
์ง๊ธ ๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด ๊ทธ๋ฆฌ๋๊ฐ ์ข ๋ถ์กฑํ๋ค. ๋ํ ์ถ์ ์ ์ํด์๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ผํ ๊ฑฐ๊ฐ๋ค.
๊ฐ๋ ์ค๋ฒ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ โ์ด๊ฑฐ ๋๋์ฒด ์ด๋ป๊ฒ ํ์งโ ํ๋ ๋ ๋ณด๋ฉด ๋จธ๋ฆฌ๊ฐ ์ํ๋คโฆ
์์ผ๋ก ์ค๋ฒ~๊ณจ๋ ๋์ด๋ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ค์ ํ์ด๋ด์ผ๊ฒ ๋ค.
๐ก C++? Python?
์ฒ์์ Python
์ผ๋ก ์์ํ๋ค๊ฐ, ์ปด๊ณต ๊ณต๋ถ ํ๋ ค๋ฉด ์ด์ฐจํผ C์ ์ต์ํด์ผ๋ง ํ๋ค๊ณ ์๊ฐํด์ C++
๋ก ์ ํํ๋ค.
๋ฌธ์์ด
๋ฌธ์ ๋ง Python
์ผ๋ก ํผ๋ค๋ ๊ณ ์๋ถ๋ค์ด ์๋๋ฐ, ๊ฐ์ธ ์ ํ์ด๋ค.
(๋ ๋ง์ ๊ทธ๋ด๋ ํ์ด์ฌ ์ฐ๋ ค๋ฉด ๋ ์ค๋๋ง์ด๋ผ ์ต์ํ์ง๊ฐ ์์์ ๊ทธ๋ฅ C++๋ก ํ๋ค.)
Rust
๋ ์์ฆ ๋จ๊ธฐ ๋๋ฌธ์ ํ๋ ์ฌ๋์ด ๋ง๋ค. ํ์ง๋ง ๋ค์ ์ด์ ์์ C++
์ ๋ ๋ ์ถ์ฒํ๋ค.
๋ฐฐ์ฐ๋ ์ ์ฅ์์๋ ๋ค๋ฅธ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๋ฐฐ์๊ฐ๋ ์ ์ด ์์ด์ผ ํ๋๋ฐ ์ด ์ ์์ C++์ ์ด๊ธธ ์ธ์ด๋ ์๋ค.
์ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ ๋๋, ๊ตฌ๊ธ๋ง์ ํด์ ๋ค๋ฅธ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณผ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด์ ๊ตฌ๊ธ์ โ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ํ์ด์ฌโ์ ๊ฒ์ํ๋๊ฒ๋ณด๋ค, โ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ C++โ์ ๊ฒ์ํ๋ฉด
๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ ๋ง๊ณ , ๋ง์ ๋งํผ ์ข์ ์ค๋ช ๋ค์ด ์ด๋ฏธ ๋์์๊ธฐ ๋๋ฌธ์ ๊ณต๋ถํ๋๋ฐ ๋์์ด ๋๋ค.
๋ฌผ๋ก ์ฌ๋๋ง๋ค ๋ค๋ฅด๊ฒ ์ง๋ง, ์ปด๊ณต ์ ํํ์ง ๋ณ๋ก ์๋์๊ฑฐ๋, ์ปด๊ณต ์ ํ์ ๋ฐ๋ผ๋ ๋ถ๋ค, ์ฝํ ์ค๋นํ๋ ๋ถ๋ค์๊ฒ ์ด๋ฐ ์ด์ ๋ก C++์ ์ถ์ฒํ๋ค.
๐ก ๊ณต๋ถ ๋ฐฉ๋ฒ ์ถ์ฒ
๋ฐฑ์ค์ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ณด๋ฉด โ๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐโ ํํธ๊ฐ ์๋ค.

๊ณต๋ถํ๊ธฐ ์ข๊ฒ ์์๊ฐ ์ง์ฌ์ ธ ์๋ค.
์์๋๋ก ์ญ ํ์ด๋ณด๋ฉด์ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ด ๋์ค๋ฉด ๊ตฌ๊ธ๋ง์ ํ์.
๊พธ์คํ ๊ณต๋ถํ๋ค๋ณด๋ฉด ๋ฌธ์ ํธ๋ ๋ง์ด ์์ ๊ฒ์ด๋ค. (๋๋ง ๊ทธ๋ฐ๊ฐ)
๊ณจ๋ ๋ฌธ์ ๋ฅผ ๋ค์ด๊ฐ๋ค๋ณด๋ฉด ๋ชจ๋ฅด๊ฒ ๋ ๋ฌธ์ ๊ฐ ์์ฃผ ์๊ธธํ ๋ฐ, ์ ๋นํ ์๊ฐํด๋ณด๋ค๊ฐ ์์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๊ตฌ๊ธ๋ง ํ์!
์์ง ๋ฐฐ์ฐ๋ ๋จ๊ณ์ด๋ฏ๋ก ์ ํ ์๊ฐ๋ชปํ ํ์ด๋ฒ์ด ์์ ์ ์๋๋ฐ ์ค๋ ๋ถ์ก๊ณ ์๋๊ฒ๋ ์๊ฐ ๋ญ๋น์ด๋ค.
๊ทธ ๋จ๊ณ์ ๋์์๋๋ฐ ๋ญ๊ฐ ์ค์ํ๊ฑฐ ๊ฐ๊ณ ์ดํด๊ฐ ๋ถ์กฑํ๋ฉด ๊ทธ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ๋ ํ์ด๋ณด์.
๋ ์ฐธ๊ณ ๋ก BFS, ์ต๋จ๊ฑฐ๋ฆฌ ๋ ๋๋ฌด ์ค์ํด๋ณด์ฌ์ ์ด ๋จ๊ณ๋ณ ๋ฌธ์ ์ธ์๋ ๋ง์ด ํ์ด๋ดค๊ณ ,
์ ๋์จํ์ธ๋ ๋จ๊ณ๋ถํฐ๋ ์ด๋์ ๋ ๋์ด๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ ํ์ด๋ณด๊ณ ์ถ์ด์ ๋ชจ๋ ๋ ํ์ด๋ดค๋ค.
โโ ์ ๋๋ก ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ถ์ฌ์์ ์ ์ถํ์ง ๋ง์.
๋น์ฐํ ์ด๋ณด์ผ ๋๋ ๋ณต๋ถ์ ์์ ํ์ง ์๋๊ฒ ์ข๋ค.
ํ์ง๋ง, ๊ณจ๋ ํฐ์ด ์ด์๋ถํฐ๋ ์๋ง ๊ตฌํ๋ ์ด๋์ ๋ ํ ํ ๋ฐ ๋ชจ๋ ๋ฐ๋ผ ์น๋๊ฑด ์๊ฐ๋ญ๋น๋ผ๊ณ ๋ณธ๋ค.
๋ค๋ฅธ์ฌ๋์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ ๋ณต๋ถ์ ํด๋ ๋์ง๋ง,
๋ถ์ฌ๋ฃ์ ํ ํ๋ํ๋ ์ฝ์ด๋ณด๋ฉด์, ๋ด๊ฐ ์๋ ์ฐ๋ ์ฝ๋ ์คํ์ผ๋ก ๋ฐ๊พธ๊ณ , ๋ณ์๋ช ๋ ๋ฐ๊พธ์.
๊ทธ๋ฌ๋ค ๋ณด๋ฉด ์ฝ๋๋ฅผ ์ดํดํ๊ฒ ๋๋ค.
๋๋ ์ฐธ๊ณ ๋ก ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ๋ฐ๊พธ๋ฉด์๋, ์ด๊ฑฐ๋ณด๋ค ๋ ์ต์ ํ ํ๋ ๋ฐฉ๋ฒ์ ์์๊น?
๊พธ์คํ ์์ฌํ๊ณ ์๊ฐํ๋ค.
โโ ์ฃผ์์ ๋ง์ด ๋ฌ์
์ด๊ฑด ๋ญ ๋ชจ๋ ์ฌ๋์ด ๋งํ ๊ฒ์ด๋ค. ์ง๊ธ ์๊ณ ๋ฆฌ์ฆ ๋ํ ๋๊ฐ์ 1๋ถ 1์ด๊ฐ ์ค์ํ๊ฒ ์๋๋ฉด, ์ฃผ์์ ๊ณ์ ๋ฌ์.
์ฝ๋ ์ฃผ์ ๋ฟ๋ง์ด ์๋๋ผ, ๊ณต๋ถํ๋ ์ ์ฅ์์๋ ๋ด๊ฐ ์ค์ํ๋ ๋ถ๋ถ, ์ค์ํ๋ ์ด์ , ๋ชฐ๋ผ์ ๊ตฌ๊ธ๋งํ๋ ์์ด๋์ด,
๋ชจ๋ ๋ค ์ ์ด์ฃผ์. ๋ค์ ๊ทธ ์ฝ๋๋ฅผ ๋ณผ ์ผ์ด ์๋๋ผ๋, ์ฃผ์์ ์น๋ฉด์ ํ๋ฒ ๋ ๋๋ผ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๋ค.
โโ ๋ง์๋ค๊ณ ๋์ด ์๋๋ค.
๋ด๊ฐ ์ ๋ง ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋๋ ์ ๋ง ๊ฑฐ์ง๋ง ์์น๊ณ ๋ธ๋ก ์ฆ 5 ๋ฌธ์ ๋ผ๋, ๋ง์์ต๋๋ค!! ๊ฐ ๋์ค๋ฉด ๋ฐ๋ก ๋์ด๊ฐ์ง ์๋๋ค.
๋ฐฑ์ค์๋ ์ฑ์ ํํฉ์์, ๋ค๋ฅธ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค.
์์ ์ด ํํ ์ธ์ด๋ก ์ ํํ๊ณ ๋ง์์ต๋๋ค ์ต์ ์ ์ ํํ๊ณ ๊ฒ์ํด์ฃผ์.

์ด๋ ๋ฏ ๊ฐ์ ๋ฌธ์ ์ด๊ณ , ๊ฐ์ ์ ๋ต์ด๋ผ๋, ์ฝ๋์ ์๋๋ ๋ฌธ์ ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ค๋ฅผ ์ ์๋ค.
๋ด๊ฐ ์ ์ถํ ์ฝ๋์ ์๊ฐ์ด ๋จ๋ค๋ณด๋ค ๋๋ฆฐ๊ฑด ์๋์ง
์ฒดํฌํ์.
ํจ์ฌ ๋น ๋ฅธ ์ฝ๋๊ฐ ์๋ค๋ฉด, ์ด๋ค ๋ถ๋ถ์ด ๋ฌ๋ผ์ ๋น ๋ฅธ์ง๋ฅผ ๋๋ฌ๋ณด๊ณ ๋น๊ตํด๋ณด๊ณ ๋ด ์ฝ๋๋ฅผ ์์ ํด๋ณด์.
ํญ์ ์ด๋ ๊ฒ ํด์ ๋จ๋ค์ฒ๋ผ ๋น ๋ฅธ ์๊ฐ์ด ๋์ฌ๋๊น์ง ๋ด ์ฝ๋๋ฅผ ์์ ํด์ ์ ์ถํ๋ค.
๊ทธ๋ฌ๋ฉด์ ์ด๋ค ๋ถ๋ถ์์ ์๊ฐ๋ญ๋น๊ฐ ๋๊ณ ์๋ ๊ฑด ์๋์ง
, ์ด๋ค ์ต์ ํ ํ
ํฌ๋์ด ์๋์ง
๋ฅผ ์๊ฐํ๋ฉด์ ์ค๋ ฅ์ด ๋๋ ๊ฒ์ด๋ค.
๋์ค์๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋น๊ตํด๋ณด๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๊ณ ์๋์ง
, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ์๊ฐ๋ ํด๋ณด์.

์ ์ฌ์ง์ฒ๋ผ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋์ ์๊ฐ์ด ๋ ์ ์๊ฒ ์์ด์ ๊ทธ ์ฝ๋๋ฅผ ๋ณด๊ณ , ๊ทธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ ๋ด ์ฝ๋๋ฅผ ์์ ํด์ ์ ์ถํ๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ์ด ์ ์ด์ง๋๊น์ง ๊ณ์ ๋ฐ๋ณตํด๋ณด์. ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด ์ค๋ ฅ์ด ๋ง์ด ์ข์์ง ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ ์ข์ ์ ์ด ๋ด๊ฐ ๋ชจ๋ฅด๋ stl์ด๋ ์ง์์ ์ ์ ์๋ค.
์๋ฅผ ๋ค์ด memset์ด๋ผ๋๊ฐ, lowerbound ๋ฑ๋ฑ ์์ฃผ ๋ง์ STL
,
struct๋ class๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์
์ด? ์ด๊ฑด ๋ญ์ง? ํ๊ณ ๊ตฌ๊ธ๋ง ํด๋ณด๊ณ ๋ด๊ฒ์ผ๋ก ๋ง๋ค์ด๊ฐ๋ ๊ฒ์ด๋ค.
๋ด ์ฝ๋๋ง ๋ณด๊ณ ์ ์ถํ๊ณ ๋์ด๋ผ๋ฉด ์ด๋ฐ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ์ฉํ๋ ๊ฒ๋ค์ ์์ง ๋ชปํ์ ๊ฒ์ด๋ค.
๐ก ์์ผ๋ก๋ ํฐ์ด๋ฅผ ์ฌ๋ฆด๊ฑด๊ฐ?
์ ๋ ์๋๋ค. ์ ์ด์ ๋ฐฑ์ค์ ์์ํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ์ฌ์ค์ ํดํ์ ์ค๋ํด์ ๊ธฐ๋ณธ ์ฝ๋ฉ๋ ๋ค ๊น๋จน์์๊ณ , ์ปด๊ณต์ธ๋ฐ ๊ทธ๋๋ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋ฉ์ ๊ผญ ํด์ผํ๋ค๊ณ ์๊ฐํด์ ๋ฐฑ์ค ๋จ๊ณ๋ณ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์์ํ ๊ฒ์ด๋ค.
์ด์ฐจํผ ํฐ์ด ์์คํ ์ ์ด์ ๋ ํฐ์ด๋ฅผ ์ฌ๋ฆฌ๊ธฐ ์ํด์๋ ๋ค์ด์ ์ด์์ ๋ฌธ์ ๋ฅผ ํ์ด์ผํ๋๋ฐ, ๊ทธ๋ ๊ฒ ํ๊ธฐ์ ์๊ฐ์ด ๋๋ฌด ๋ง์ด ํฌ์๋๋๊ฒ ๊ฐ๋ค.
์ง๊ธ์ ๋ณตํ ํ ์ ๊ณต๊ณผ๋ชฉ ํ์ ๊ด๋ฆฌ์ ์ ๊ฒฝ์ฐ๊ณ , ์ด๋์ชฝ์ผ๋ก ์ง๋ก๋ฅผ ๊ฐ์ง๊ฐ ์ ํํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
์๊ฐ ๋ ๋๋ง๋ค ๋์ค์ ์ฝํ ์ ๋ ๋ณผ ์ ์๋๋ก ๊ณจ๋ ๋ฌธ์ ๋ค์ ๋น ๋ฅด๊ณ ์ ํํ ํธ๋ ์ ๋๋ง ๋ฐ๋ณต ํ์ตํ ๊ฒ ๊ฐ๋ค.