2์ฐจ์ ๋ฐฐ์ด ๋ด ์๋ฅผ ํน์ ํํ์ ๋ง๊ฒ ํ์ ์ํค๋ ๋ก์ง์ for๋ฌธ๊ณผ while๋ฌธ์ ์ ์ ํ ํ์ฉํ์ฌ์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
17144๋ฒ: ๋ฏธ์ธ๋จผ์ง ์๋ !
boj.ma
๋ฌธ์ ์์ฝ
์ซ์๋ก ํํ๋ ๋จผ์ง๋ค์ ์ฌ๋ฐฉ์ผ๋ก ํผ์ง๋ฉฐ ๊ทธ ํฌ๊ธฐ๊ฐ ํผ์ง ๋งํผ ์ค์ด๋ ๋ค. ๋ํ, ์ซ์ -1๋ก ํํ๋ ๊ณต๊ธฐ ์ฒญ์ ๊ธฐ๋ก ๋จผ์ง๊ฐ ๋ค์ด๊ฐ๋ฉด ํด๋น ๋จผ์ง๋ ์ฌ๋ผ์ง๊ฒ ๋๋ค. ๊ณต๊ธฐ ์ฒญ์ ๊ธฐ๊ฐ ์๋ํ์ฌ ๋จผ์ง์ ์์น๋ฅผ ์ด๋ ์ํค๋ ํน์ ํจํด์ผ๋ก ์ ํด์ ธ ์๋ค.
๋ช ๋ฌ ์ ์ ํ์ด๋ณด๋ ค๊ณ ์๋ํ์์ผ๋ ์คํจํ์๋ ๋ฌธ์ ์ด๋ค. ์คํจ์ ์์ธ์ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ํด์ ๋จผ์ง๊ฐ ์ด๋ํ๋ ๊ฒ์ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ ์ง ๊ฐ์ด ์ค์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ํด์ ๋จผ์ง๊ฐ ์ด๋ป๊ฒ ์์ง์ด๊ฒ ๋๋์ง๊ฐ ํด๋น ๋ฌธ์ ์ ํต์ฌ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ฌด์กฐ๊ฑด ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ํด ์ํ ๊ธฐ๋ฅ๊ฐ ํ์ฑ๋๋ค.
๋ฌธ์ ์กฐ๊ฑด์ ๋ณด๋ฉด N*M ๊ทธ๋ํ์์ ๊ณต๊ธฐ ์ฒญ์ ๊ธฐ๋ ํญ์ 1 ~ N-2(์ธ๋ฑ์ค ๊ธฐ์ค)์ ์์นํ๋ ๊ฒ์ ์ ์ ์๋ค. ์ฆ, ์ด๋ป๊ฒ๋ ์์๋ ๊ณต๊ธฐ ์ฒญ์ ๊ธฐ๋ ์ํ ๊ธฐ๋ฅ๋ฅผ ๋ง๋ค์ด์ ๋จผ์ง๊ฐ ๋น๊ธ๋น๊ธ ๋๋๋ก ํ๋ ๊ฒ์ด๋ค.
์ด๋ป๊ฒ ์ํ ๊ธฐ๋ฅ๋ฅผ ๊ตฌํํ ๊ฒ์ธ๊ฐ?
# AS-IS
1, 2, 3
4, 5, 6
7, 8, 9
# TO-BE
2, 3, 6
1, 5, 9
4, 7, 8
ํด๋น ํ๋ ฌ ๋ณํ์ ์ด๋ป๊ฒ ์ฝ๊ฒ ํ ์ ์์์ง ํ์ ํ๋ ๊ฒ์ด ์ฐ์ ์ด๋ค. 5๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ ๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด ์๋์ ์ ์ฐจ๊ฐ ํ์ํ๋ค.
1. ๊ธฐ์ค์ด ๋๋ (0, 0) ์ธ๋ฑ์ค์ ๊ฐ์ ์ ์ฅํ๋ค.
2. (0, 1) ์ธ๋ฑ์ค์ ๊ฐ์ (0, 0) ์ธ๋ฑ์ค์ ํ ๋นํ๋ค.
3. (0, 2) ์ธ๋ฑ์ค์ ๊ฐ์ (0, 1) ์ธ๋ฑ์ค์ ํ ๋นํ๋ค.
4. (1, 2) ์ธ๋ฑ์ค์ ๊ฐ์ (0, 2) ์ธ๋ฑ์ค์ ํ ๋นํ๋ค.
...
n. (1, 0) ์ธ๋ฑ์ค์ ๊ฐ์ (2, 0) ์ธ๋ฑ์ค์ ํ ๋นํ๋ค.
n+1. ์ ์ฅํด๋ ๊ฐ์ (1,0)์ ํ ๋นํ๋ค.
์ฆ, ์ด๋ค ํ ๊ฐ์ ์ ์ฅํด ๋๊ณ , ์ ์ฅํ ๊ฐ์ ๋ฎ์ด ์์ฐ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๋ณต ์ํํ๋ ๊ฒ์ด๋ค. ํ์ ์ค ์ด๋ ์์ ์ธ๋ฑ์ค์ ๊ฐ์ ํ์ฌ ์์นํ ์ธ๋ฑ์ค์ ํ ๋นํ๋ ๊ฒ์ผ๋ก๋ ๋ณผ ์ ์๋ค.
์ด๋ป๊ฒ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์ญ! ์ด๋ํ๋ค๊ฐ ๋ง๋ค๋ฅธ ๊ธธ์ด๋ฉด ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ์ฌ ์ญ! ์ด๋ํ๋ ๊ฒ์ ๊ตฌํํ ๊ฒ์ธ๊ฐ?
์ ๋ฐฉ์๋๋ก ๊ฐ์ ํ ๋นํ ์ ์์ผ๋ ํ์ ์ค ์ด๋ ์์ ์์น๋ฅผ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง์ถฐ์ผ ํ๋ค. ์ด๋ฅผ ์ํด for ๋ฌธ๊ณผ while๋ฌธ์ ์ค์ฒฉ์ ํ์ฉํ๋ค.
for ๋ฌธ์ ์ญํ
for ๋ฌธ์ ํ์ ์ด๋ ๋ฐฉํฅ์ ๋ํ๋ธ๋ค. ์ฆ, for ๋ฌธ์์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ ๊ฒฝ์ฐ ๋์ชฝ์ผ๋ก, ๋ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ ๊ฒฝ์ฐ ๋จ์ชฝ์ผ๋ก, ์ธ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ ๊ฒฝ์ฐ ์์ชฝ์ผ๋ก, ๋ค ๋ฒ์งธ ์ธ๋ฑ์ค์ธ ๊ฒฝ์ฐ ๋ถ์ชฝ์ผ๋ก ์ด๋ํ๋๋ก ํ๋ ๊ฒ์ด๋ค. ์ฆ, ํด๋น for๋ฌธ์ ์ธ๋ฑ์ค ์๋ฒ์ ๋ฐ๋ผ ์ด๋ ๋ฐฉํฅ์ด ๊ฒฐ์ ๋๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
up_dx = [-1, 0, 1, 0]
up_dy = [0, 1, 0, -1]
st_x, st_y = up_x, up_y
for k in range(4):
while True:
prev_x, prev_y = st_x, st_y
st_x += up_dx[k]
st_y += up_dy[k]
if not (0 <= st_x and st_x <= up_x and 0 <= st_y and st_y < M):
st_x -= up_dx[k]
st_y -= up_dy[k]
break
original_matrix[prev_x][prev_y] = original_matrix[st_x][st_y]
- for ๋ฌธ์ k๋ up_dx[k]์ ํํ๋ก ํ์ฉ๋๋ค. k๊ฐ 0์ธ ๊ฒฝ์ฐ up_dx[k], up_dy[k]๋ ๊ฐ๊ฐ -1, 0์ด ๋๋ค.
- k๊ฐ ์ฆ๊ฐํ๋ฉฐ st_x, st_y๊ฐ ๋ณํํ๋ ๊ฐ์ด ๋ฌ๋ผ์ง๋ ๊ฒ์ด๋ค.
while ๋ฌธ์ ์ญํ
while ๋ฌธ์ ๋ฒ์ ํ๊ณ๊น์ง '์ฃผ์ฑ!'์ด๋ํ๋๋ก ํ๋ ์ญํ ์ ํ๋ค.
while True:
prev_x, prev_y = st_x, st_y
st_x += up_dx[k]
st_y += up_dy[k]
if not (0 <= st_x and st_x <= up_x and 0 <= st_y and st_y < M):
...
break
st_x, st_y๋ if ๋ฌธ ์กฐ๊ฑด์ ๋ง์กฑํ์ฌ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ๊น์ง ์ง์ ๋ฐ๋ณต๋ฉ๋๋ค. ์ฆ, ๊ณต๊ธฐ ์ฒญ์ ๊ธฐ๊ฐ ์ํํ์ฌ์ผ ํ๋ ๋ฒ์๋ฅผ ๋ชจ๋ ์ํํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ข ๋ฃ ์กฐ๊ฑด์ ๊ณต๊ธฐ ์ฒญ์ ๊ธฐ๊ฐ ๋จผ์ง๋ฅผ ์ํ์ํค๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ์ด๋ค.