์ด ๊ธ์ ๋ฌํฝ์ด ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ๋ด๊ฐ ํ๋ ธ๋ ๋ถ๋ถ์ ์ ๊ฒํ๋ ๊ธ์ด๋ค.
๋ค์์ ๋ค์ ํ๊ธฐ์ ์ ์ด ๊ธ๋ง ์ฝ๊ณ ๋ ๋ฌธ์ ์ ๊ตฌํ์ ๋ค์ ์๊ฐํ ์ ์๋๋ก,
ํด๋น ๋ฌธ์ ๋ grid์ ๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด๋ก ์๊ฒผ์ง๋ง, ์ด๋ป๊ฒ ํ์ดํ๋์ ๋ฐ๋ผ grid์ ์ ๊ทผํด์ผํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค.
0. ๋ณ์ ์ค์
1) ๋ฌํฝ์ด ์ง ์ด๊ธฐํ
-> ๋ฌํฝ์ด ์ง์ด ๋๋ 2์ฐจ์ ๋ฐฐ์ด ์ด๊ธฐํ
grid = [[0]*n for _ in range(n)]
์ด์ฐจํผ num์ผ๋ก ์์ ๊ฐ์ ์ฑ์์ค๊ฑฐ๋๊น 0์ผ๋ก ์ด๊ธฐํ ํด๋ ๋จ
2) 4๊ฐ์ง ๋ฐฉํฅ ์ค์ top, left = 0 , 0 / bottom, right = 0,0
3) for๋ฌธ ์์์ ์ธ๋ฑ์ค ๋ณ์๋ก ์ฌ์ฉํ row, col์ ๋ฐ๋ก ์ด๊ธฐํ ํด์ค ํ์๊ฐ ์๋ค. for๋ฌธ ์์์ ๋ฐ๋ก ์ฌ์ฉํด์ฃผ๋ฉด ๋จ
1. ๋ง์ฝ 4๊ฐ์ง ๋ฐฉํฅ (์์ค ์ข-> ์ฐ, ์ค๋ฅธ์ชฝ ์->ํ, ํ๊ฐ ์ค๋ฅธ์ชฝ ์ด, ์๋ซ์ค ์ฐ->์ข, ์์น ์ข์ธก ์ด) ์ผ๋ก ์ค์ ํ๋ค๋ฉด ๋ฐ๋ณต๋ฌธ while ์ ๋จผ์ ์ค์ ํ๊ณ ๊ทธ ์์์ 4๊ฐ์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ for๋ฌธ์ 4๊ฐ ๋ง๋ค์ด์ค๋ค.
2. ์ดํ๋ก ๊ณ ๋ คํ ๊ฒ์ while๋ฌธ ์์ ์๋ for๋ฌธ์ ๋ฒ์๋ฅผ ์ค์ ํด์ฃผ๋ ๊ฒ,
1) ์์ค ํ ์ข-> ์ฐ,
for col in range(left, right+1)
2) ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ด ์->ํ,
3) ์๋ซ์ค ํ ์ฐ->์ข,
4) ์์น ์ข์ธก ์ด
์ฌ๊ธฐ์ ์ด ๋ฌธ์ ์ ์ง๊ฐ๊ฐ ๋ํ๋๋ค๊ณ ์๊ฐํ๋ค!!!
row์ col์ ๊ฐํ์ง๋ง์. ๋ณ์๋ณด๋ค ๊ตฌํด์ผํ๋๊ฒ์ ํธ๋ ๋ก์ง์ ์ง์คํ์
๋๊ฐ์ด ์ฝํ
์ฐ์ต์์ด ์์ง ์ ์ ์ฌ๋์ ์ฌ๊ธฐ์ ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค.
๋ฐ๋ก, ํ row ์ ์ฑ์ฐ๋ ๊ฒ์ธ๋ฐ ์ for๋ฌธ ์์์ ๋ณ์๋ col์ด ๋์ค๋์ง => ๊ทธ ์ด์ ๋ ํ์ ์ฑ์ด๋ค๋ ์๋ฏธ๋ ์ด๋ฏธ ๊ทธ ํ์ด top์์ ์ฐ๋ฆฌ๊ฐ ๊ณ ์ ์์ผ๋จ๊ณ ํ์ ๊ณ ์ ์์ผฐ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์นธ์ฉ ์์ง์ด๋ฉด์ ์ฑ์์ผํ๋๊ฑด columns์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฅผ ์ฝ๋๋ก ์์ฑํ๋ฉด, for col in range(left, right+1)
๋ค์, ๊ทธ ์๋ 2๋ฒ์ผ์ด์ค๋ฅผ ๋ณด๋ฉด์ ์ค๋ช
ํ์๋ฉด,
๊ฐ์ฅ ์ฐ์ธก ์ด์ ์ฑ์ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ด์ ์ด๋ฏธ right ๋ก ๊ณ ์ ์ ์์ผ๋จ์ผ๋ for๋ฌธ์์ ํ์นธ์ฉ ์ ์งํ๋ฉฐ ์ฑ์์ผํ๋ ๊ฑด top์ด bottom์ผ๋ก ํ์นธ์ฉ ๊ฐ๋ ๊ฒ, ์ฆ row์ธ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ฝ๋๋ก ์์ฑํ๋ฉด for row in range(top, bottom+1) ์ด๋, bottom์ n-1์ด๊ธฐ ๋๋ฌธ์ ๋ฒ์งธ๋ก๋ n๋ฒ์งธ, ๊ฐ์ผ๋ก๋ n-1๊น์ง ๊ฐ๋ ค๋ฉด bottom+1์ ํด์ค์ผ ํ๋ค.
์ธ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ ๋ฐฉํฅ์ด ์ญ๋ฐฉํฅ์ผ๋ก ๋ฐ๋๋ค๋ ๊ฒ์ด ์ฐจ์ด์ ์ด๋ค.
right์์ left๋ก ์ด๋ํ๋ ๊ฒ, ์ด๊ฑธ for๋ฌธ ํํ๋ฒ์ผ๋ก right, left-1, -1์ด ๋๋๋ฐ ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ์ฒซ for๋ฌธ์ ์์์ผ๋ก left์ ์ด ํ์ค์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ -1์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
๋ค๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ ์๋ซ์ค์์ ์ด๋ํ๋๊น bottom์์ ์์ํ๊ณ top๊ธฐ์ค์ผ๋ก ์ด๋ฏธ ํ์ค ์ฑ์ ์ผ๋ top-1๊น์ง ์ญ๋ฐฉํฅ ์ด๋์ด๋๊น -1ํ๋ฉด์ for๋ฌธ์ ๋ง๋ค์ด์ฃผ๊ณ col์ ๊ณ ์ ์ด๋๊น row๋ฅผ ๋ณ์๋ก ๋ฐ๋๋ค. for row in range(bottom, top-1,-1)
ํญ์ row๊ฐ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค, col์ด ๋๋ฒ์งธ ์ธ๋ฑ์ค๋ผ ์๊ฐํ๊ณ grid[][]๋ ๊ฐ ๋ฐ๋ณต๋ฌธ์์ ๊ณ ์ ๋ ๊ฐ์ ๊ทธ๋๋ก ๋ฃ์ด์ค๋ค.
grid[r][right] = num ์ด๋ ๊ฒ
3. ์ด์ for๋ฌธ ์์์ ์ด๋ ํ ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ ธ์ผํ๋์ง ์ดํด๋ณด์.
grid[r][right] = num ์ด๋ ๊ฒ num๊ฐ์ ์์๋ก ๋์
ํด์ฃผ๋ฉด, num+=1์ ํตํด ๋ณ์๊ฐ์ ๊ฐฑ์ ํด์ฃผ๊ณ ,
for๋ฌธ์ ๋์์ right ๊ฐ์ - 1 ํด์ค๋ค.
์ for๋ฌธ์์ ๋์์ ๊ฐฑ์ ํด์ฃผ๋? ์กฐ๊ธ๋ง ์๊ฐํด๋ณด์. for๋ฌธ ์์ ์ธ๋ฑ์ค ์์๋ก right๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ๋์ผํ ๋ฐ๋ณต๋ฌธ์์์ ๊ทธ ๊ฐ์ ๋ณ์๋ก ๊ณ์ ๋ฐ๊พธ๋ ค๊ณ ์๋ํ๋ฉด ์ธ๋ฑ์ค ์๋ฌ๊ฐ ๋ ๊ฒ์ด๋ค.
์ด๋ถ๋ถ์ ์ธ์งํ๋ฉด ์คํ๋ ค ๊ทธ if๋ฌธ๊ณผ ๊ทธ ๋ค์ for๋ฌธ ์์ฑํ๊ธฐ๊ฐ ์ฌ์์ง๋ค.
right๊ฐ ์ธ๋ฑ์ค์ ๋ค์ด๊ฐ๋ ๋ณ์๋๊น if๋ฌธ์ผ๋ก while์ ์ข
๋ฃ ์กฐ๊ฑด์ right๊ฐ ์๋ํธ์ธ left๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ก break๋ฌธ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
๋จ์ ๋ด์ฉ๋ ๋์ผ
4. ์ถ๋ ฅ ์ด์
์ถ๋ ฅ์ ๋๋ก for๋ฌธ์ ๋๊ฐ ์ฌ์ฉํด์ ๋ง์ถฐ์ค์ผํ๋ค๋ ๊ฒ์ ์์ง ๋ง๊ธฐ.
ํ
์คํธ ์ผ์ด์ค์ ๋ฐ๋ฅธ for๋ฌธ์ ๊ทธ๋ฅ ์์์ผ๋ฟ, ์ฐ๋ฆฌ๊ฐ ๋ง์ถฐ์ผํ๋๊ฑด ์ถ๋ ฅ๋๋ ๋ชจ์ต์ด๋ค. ์ซ ใดใด