๐ ๋ฌธ์
https://www.acmicpc.net/problem/19237
๋ฌธ์
์ฒญ์๋ ์์ด๋ ๋์ฑ ์๋ผ ์ด๋ฅธ ์์ด๊ฐ ๋์๋ค. ์์ด๊ฐ ์ฌ๋ ๊ณต๊ฐ์ ๋ ์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ์ค์ง ์๊ณ ๋ค๋ฅธ ์์ด๋ค๋ง์ด ๋จ์์๋ค. ์์ด์๋ 1 ์ด์ M ์ดํ์ ์์ฐ์ ๋ฒํธ๊ฐ ๋ถ์ด ์๊ณ , ๋ชจ๋ ๋ฒํธ๋ ์๋ก ๋ค๋ฅด๋ค. ์์ด๋ค์ ์์ญ์ ์ฌ์ํ๊ธฐ ์ํด ๋ค๋ฅธ ์์ด๋ค์ ์ซ์๋ด๋ ค๊ณ ํ๋๋ฐ, 1์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์ด๋ฅธ ์์ด๋ ๊ฐ์ฅ ๊ฐ๋ ฅํด์ ๋๋จธ์ง ๋ชจ๋๋ฅผ ์ซ์๋ผ ์ ์๋ค.
N×N ํฌ๊ธฐ์ ๊ฒฉ์ ์ค M๊ฐ์ ์นธ์ ์์ด๊ฐ ํ ๋ง๋ฆฌ์ฉ ๋ค์ด ์๋ค. ๋งจ ์ฒ์์๋ ๋ชจ๋ ์์ด๊ฐ ์์ ์ ์์น์ ์์ ์ ๋์๋ฅผ ๋ฟ๋ฆฐ๋ค. ๊ทธ ํ 1์ด๋ง๋ค ๋ชจ๋ ์์ด๊ฐ ๋์์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ์นธ ์ค ํ๋๋ก ์ด๋ํ๊ณ , ์์ ์ ๋์๋ฅผ ๊ทธ ์นธ์ ๋ฟ๋ฆฐ๋ค. ๋์๋ ์์ด๊ฐ k๋ฒ ์ด๋ํ๊ณ ๋๋ฉด ์ฌ๋ผ์ง๋ค.
๊ฐ ์์ด๊ฐ ์ด๋ ๋ฐฉํฅ์ ๊ฒฐ์ ํ ๋๋, ๋จผ์ ์ธ์ ํ ์นธ ์ค ์๋ฌด ๋์๊ฐ ์๋ ์นธ์ ๋ฐฉํฅ์ผ๋ก ์ก๋๋ค. ๊ทธ๋ฐ ์นธ์ด ์์ผ๋ฉด ์์ ์ ๋์๊ฐ ์๋ ์นธ์ ๋ฐฉํฅ์ผ๋ก ์ก๋๋ค. ์ด๋ ๊ฐ๋ฅํ ์นธ์ด ์ฌ๋ฌ ๊ฐ์ผ ์ ์๋๋ฐ, ๊ทธ ๊ฒฝ์ฐ์๋ ํน์ ํ ์ฐ์ ์์๋ฅผ ๋ฐ๋ฅธ๋ค. ์ฐ์ ์์๋ ์์ด๋ง๋ค ๋ค๋ฅผ ์ ์๊ณ , ๊ฐ์ ์์ด๋ผ๋ ํ์ฌ ์์ด๊ฐ ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ ๋ค๋ฅผ ์ ์๋ค. ์์ด๊ฐ ๋งจ ์ฒ์์ ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๊ณ , ๊ทธ ํ์๋ ๋ฐฉ๊ธ ์ด๋ํ ๋ฐฉํฅ์ด ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ด ๋๋ค.
๋ชจ๋ ์์ด๊ฐ ์ด๋ํ ํ ํ ์นธ์ ์ฌ๋ฌ ๋ง๋ฆฌ์ ์์ด๊ฐ ๋จ์ ์์ผ๋ฉด, ๊ฐ์ฅ ์์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์์ด๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๊ฒฉ์ ๋ฐ์ผ๋ก ์ซ๊ฒจ๋๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ N, M, k๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000)
๊ทธ ๋ค์ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฒฉ์์ ๋ชจ์ต์ด ์ฃผ์ด์ง๋ค. 0์ ๋น์นธ์ด๊ณ , 0์ด ์๋ ์ x๋ x๋ฒ ์์ด๊ฐ ๋ค์ด์๋ ์นธ์ ์๋ฏธํ๋ค.
๊ทธ ๋ค์ ์ค์๋ ๊ฐ ์์ด์ ๋ฐฉํฅ์ด ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. 1, 2, 3, 4๋ ๊ฐ๊ฐ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ ์๋ฏธํ๋ค.
๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ ์์ด์ ๋ฐฉํฅ ์ฐ์ ์์๊ฐ ์์ด ๋น 4์ค์ฉ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ์ค์ 4๊ฐ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ํ๋์ ์์ด๋ฅผ ๋ํ๋ด๋ ๋ค ์ค ์ค ์ฒซ ๋ฒ์งธ ์ค์ ํด๋น ์์ด๊ฐ ์๋ฅผ ํฅํ ๋์ ๋ฐฉํฅ ์ฐ์ ์์, ๋ ๋ฒ์งธ ์ค์ ์๋๋ฅผ ํฅํ ๋์ ์ฐ์ ์์, ์ธ ๋ฒ์งธ ์ค์ ์ผ์ชฝ์ ํฅํ ๋์ ์ฐ์ ์์, ๋ค ๋ฒ์งธ ์ค์ ์ค๋ฅธ์ชฝ์ ํฅํ ๋์ ์ฐ์ ์์์ด๋ค. ๊ฐ ์ฐ์ ์์์๋ 1๋ถํฐ 4๊น์ง์ ์์ฐ์๊ฐ ํ ๋ฒ์ฉ ๋ํ๋๋ค. ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ๋ฐฉํฅ์ด ์ต์ฐ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ฐ์ ์์๊ฐ 1 3 2 4๋ผ๋ฉด, ๋ฐฉํฅ์ ์์๋ ์, ์ผ์ชฝ, ์๋, ์ค๋ฅธ์ชฝ์ด๋ค.
๋งจ ์ฒ์์๋ ๊ฐ ์์ด๋ง๋ค ์ธ์ ํ ๋น ์นธ์ด ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ฒ์๋ถํฐ ์ด๋์ ๋ชป ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
1๋ฒ ์์ด๋ง ๊ฒฉ์์ ๋จ๊ฒ ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋จ, 1,000์ด๊ฐ ๋์ด๋ ๋ค๋ฅธ ์์ด๊ฐ ๊ฒฉ์์ ๋จ์ ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
โ๏ธ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
โป๏ธ 0์ด์ ์ ๋ ฅ๋ ์์ด๋ค์ ์์น์ํค๊ณ , ์ง๋์ ๋์๊น์ง ๋ฌปํ๋๋ค.
โป๏ธ ์์ด๋ค์ ์ด๋์ ๋ฐ๋ณตํ๋ ๋ฌดํ๋ฃจํ์ ๋ค์ด๊ฐ๋ค.
โป๏ธ ๋ฌดํ๋ฃจํ์ ์ฝ๋ ์์: 1์ด ์ฆ๊ฐ(์๋ก์ด ๋จ๊ณ๋ฅผ ์๋ฏธ) > ๋ฐฉ๋ฌธ ๋ฐฐ์ด ์ด๊ธฐํ > ์์ด๋ค ์ด๋ > ์ด๋์์น์ ๋์ ๋ฌปํ๊ธฐ > ์ข ๋ฃ์กฐ๊ฑด ํ์ธ
โป๏ธ ์ ์ผ ์ 1๋ฒ ์์ด๋ถํฐ ์์๋๋ก ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ด๋์์น๋ฅผ ์ฐพ๋๋ค.
โป๏ธ ์ฌ๋ฐฉํ์ ํ, ๋์๊ฐ ์๊ฑฐ๋ ์ง์์ง ๋น ๊ณณ์ด ์๋ค๋ฉด ๊ทธ ๊ณณ์ ์ด๋์์น๋ก ์ ํ๋ค. ์ด๋ํ ๊ณณ์ด ์๋ค๋ฉด ํ์ฌ ์์ด์ ๋์๊ฐ ์๋ ๊ณณ์ผ๋ก ์ ํ๋ค. (๋ชจ๋ ์ด๋์ ๊ฐ ์์ด์ ์ ์ฅ๋ ๋ฐฉํฅ ๋ณ ์ด๋์์์ ๋ฐ๋ฅธ๋ค)
โป๏ธ ์ ํด์ง ์ด๋์์น์ ์ด๋ฏธ ์์ด๊ฐ ์กด์ฌํ๋ค๋ฉด(๋ฐฉ๋ฌธ๋ฐฐ์ด์ ๊ธฐ๋ก๋์ด ์๋ค) ๋ ์ ์์ด๊ฐ ์ด๋ฏธ ์ ์๋ค๋ ๋ป์ด๋ฏ๋ก, ์ด ์์ด๋ ์ซ๊ฒจ๋๋ค.
โป๏ธ ์๋ฌด๋ ์๋ค๋ฉด ํด๋น ์์น๋ก ์์ด ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ค๋ค. ๋ฐฉ๋ฌธ๋ฐฐ์ด๋ ๊ธฐ๋กํด์ค๋ค.
โป๏ธ ๋ชจ๋ ์์ด ๋ณ๋ก ์ด๋์ด ๋๋๋ฉด, ๋ฐฉ๋ฌธ๋ฐฐ์ด์ ์ํํ์ฌ ์์ด๊ฐ ์์นํ ๊ณณ์ ๋์๋ฅผ ๋ฌปํ์ค๋ค.
โป๏ธ ํ ๋ง๋ฆฌ๋ง ๋จ์๋์ง(1๋ฒ ์์ด), ์ข ๋ฃ ์กฐ๊ฑด์ ํ์ธํ๋ค.
โ๏ธ ์์ด์ ์์น์ ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ ์ ์ฅํ ๊ตฌ์กฐ์ฒด(SHARK)๋ฅผ ๋ง๋ค์๋ค.
โป๏ธ ์์ด ๊ตฌ์กฐ์ฒด์ ๋ฐฐ์ด sharks๋ฅผ ์ ์ธํด์ x๋ฒ ์์ด์ ์ ๋ณด์(sharks[x]) ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
โ๏ธ ๊ฐ ์์ด์ ๋ณด๊ณ ์๋ ๋ฐฉํฅ ๋ณ ๋ค์ ์ด๋๋ฐฉํฅ ์์๋ 3์ฐจ์ ๋ฐฐ์ด(priorities)์ ํตํด ์ ๋ฆฌํ๋ค.
โป๏ธ ๋ฌธ์ ์์ ์ ์ํ ๋ฐฉํฅ ์ธ๋ฑ์ค(1~4)๋ ์ธ๋ฑ์ค ์ ๊ทผ์ ํธ๋ฆฌํ๊ฒ 0~3์ผ๋ก ๊ณ ์ณ ์ผ๋ค.
โป๏ธ priorities[shark number][current direction][order] = next direction
โป๏ธ ์๋ฅผ ๋ค์ด priorities[1][0][1]=3: 1๋ฒ ์์ด๊ฐ ์(0)๋ฐฉํฅ์ผ ๋ ๋ ๋ฒ์งธ(1)๋ก ์ดํด๋ณผ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ ์ค๋ฅธ์ชฝ(3)์ด๋ผ๋ ๋ป์ด๋ค.
๐ก ๋์๋ฅผ ๋ฌปํ๊ณ , ๋์๊ฐ ๋จ์์๋์ง ๋ณด๊ณ , ์์ ์ ๋์๊ฐ ์๋ ๊ณณ์ ์ฐพ๋ ๊ฒ์ ๋ชจ๋ 3์ฐจ์ ๋ฐฐ์ด(map)์ ํตํด ์ ๋ฆฌํ๋ค.
โป๏ธ map[i][j][0]: (i,j)์ ๋์๋ฅผ ๋ฌปํ ์์ด์ ๋ฒํธ
โป๏ธ map[i][j][1]: (i,j)์ ๋จ์ ๋์๊ฐ ์ ํจํ ์๊ฐ
โป๏ธ ๋์๊ฐ K๋ฒ ์ด๋ํด์ผ ์ง์์ง๋ค๋ ๊ฒ์, (๋์๋ฅผ ๋ฌปํ ์๊ฐ+K์ด) ์ดํ๋ถํฐ ๊ทธ ์์น์ ์ ๊ทผํ ์ ์๋ค๋ ๋ป์ด๋ค. ์ฆ, K=4์ผ ๋ 0์ด์ ๋ฌปํ ๋์๋ 1์ด>2์ด>3์ด>4์ด ํ 5์ด๋ถํฐ ์ฌ๋ผ์ง๊ณ ์ ๊ทผํ ์ ์๋ ๊ณณ์ด ๋๋ค.
โ๏ธ ์์ด๋ฅผ ์ซ๋ ๊ฒ์ ์ ์์ด๋ถํฐ ์ด๋์ํค๋ ๊ฒ๊ณผ ๋ฐฉ๋ฌธ๋ฐฐ์ด์ ์ค์ ํ๋ ๊ฒ์ผ๋ก ๋์ ํ๋ค.
โป๏ธ ์์ด๋ค์ ์ด๋์์น๊ฐ ๊ฒน์น๋ฉด ์ ์ผ ์์ ๋ฒํธ์ ์์ด๋ง ๋จ๋๋ค. ์ด ๋ป์ ์ ์ผ ์์ ์์ด๋ถํฐ ์ด๋์ํจ ๋ค์, ํ์ ์์น๊ฐ ๊ฒน์น๋ ๋์ ๊ทธ๋ฅ ์ง์๋ฒ๋ฆฌ๋ฉด ๋๋ค๋ ๋ป์ด๋ค.
โป๏ธ ์ด๋ฅผ ์ํด ๋ฐฉ๋ฌธ๋ฐฐ์ด(visited)๋ฅผ ์ ์ธํ๋ค. ์์ด๊ฐ ์ด๋ํ ์์น๊ฐ ์ ํด์ง๋ฉด ๋ฐฉ๋ฌธ๋ฐฐ์ด์ ํ์ธํ์ฌ, ํด๋น ์์น๊ฐ ๋น์ด ์์ผ๋ฉด ์ด๋ํ๊ณ , ๊ทธ ๊ณณ์ ์ด๋ฏธ ์์ด๊ฐ ์กด์ฌํ๋ค๋ฉด ํ์ฌ์ ์์ด๋ ์์ด๋ฐฐ์ด(sharks)์์ ์ง์๋ฒ๋ฆฐ๋ค(null).
๐ซ ์กฐ์ฌํ ๊ฒ ๐ซ
โ๏ธ ๋์ ๋ฌปํ๊ธฐ๋ ๋ฌด์กฐ๊ฑด ๋ชจ๋ ์์ด๊ฐ ์ด๋ํ ํ์, ์ซ๊ฒจ๋ ๋์ ์ซ์๋ด๊ณ ํด์ผ ํ๋ค! ๊ฐ ์์ด๋ฅผ ์ด๋์ํฌ ๋ ๋์ ๋ฌปํ๊ธฐ๊น์ง ๋์์ ํด๋ฒ๋ฆฐ๋ค๋ฉด, ๊ทธ ๋ค์ ์์ด๋ ์์ ๋ ์ด๋ํ ์ ์๋ ์์น์์๋ ๋ถ๊ตฌํ๊ณ '๋์๊ฐ ์ด๋ฏธ ๋ฌป์ด์๊ตฌ๋' ์๊ฐํ์ฌ ๊ทธ ๊ณณ์ ์ด๋์์น๋ก ๊ณ ๋ คํ์ง ์๋๋ค.
โ๏ธ 6%์์ ์ค๋ฅ๊ฐ ๋ฌ๋๋ฐ, ์๊ฐ์ด 1000์ผ ๋ ์กฐ๊ฑด์ ์ ๋๋ก ๋ฐ์ง์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
โป๏ธ (์ข ๋ฃ์กฐ๊ฑด 1) ๊ฐ์ฒด ์๊ฐ 1์ด๋ฉด ๋๋ด๊ธฐ/ (์ข ๋ฃ์กฐ๊ฑด 2) ์๊ฐ์ด 1000์ด ๋์ผ๋ฉด -1๋ก ๋ฐ๊พธ๊ณ ๋๋ด๊ธฐ >>> ์๋
โป๏ธ ์์ฒ๋ผ ์ง๋จ๋๋ time=1000์ผ ๋ ๋ ๋ง๋ฆฌ๊ฐ ๋จ๊ณ time=1001์ผ ๋ ํ ๋ง๋ฆฌ๊ฐ ๋จ์ ๊ฒฝ์ฐ, time=1001์์ ์กฐ๊ฑด1์ด ์ถฉ์กฑ๋์ด ์กฐ๊ฑด2๊น์ง ๊ฐ์ง ๋ชปํ๊ณ ๋ฃจํ๋ฅผ ์ข ๋ฃ์ํค๋ ์ค๋ฅ๊ฐ ์๊ฒผ๋ค. -1์ด ์๋ 1001์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
โป๏ธ ์ ์ค๋ฅ๋ฅผ ์ก๊ธฐ ์ํด ์ข ๋ฃ์กฐ๊ฑด ์์๋ฅผ ๋ฐ๊ฟ์ฃผ์๋ค. ์๋๋ฉด if(time==1000 && cnt>1)๋ก ์กฐ๊ฑด2๋ฅผ ๋ฐ๊ฟ์ค๋ ๋๊ฒ ๋ค.
๐โ๏ธ ์๊ฒฌ
๋๋ฅผ ์ ๋ง ๋ง์ด ์ ๋จน์ธ ์ด๋ฅธ์์ด....๐ฉ
๋ช ๋ฒ์ ๋ค์ ํ๊ณ ๊ณ ์ณ๋ ์๊พธ ํ๋ฆฌ๊ณ , ๋๋ฒ๊น ๋ ์ฝ์ง๊ฐ ์์๋ค.
์์ด๊ฐ ์ ์ด๋ํ๋์ง ํ์ธํ๋ ค๋ฉด (1.๋์๊ฐ ์ง์์ง ๊ณณ์ผ๋ก ์ ๊ฐ๋์ง/ 2.์๊ธฐ๊ฐ ์๋ ๊ณณ์ผ๋ก ๋์๊ฐ๊ฒ ๋ง๋์ง/ 3.์ด๋ ๋ฐฉํฅ ์ฐ์ ์์๋ ๋ง๋์ง) ๋ค ์ฒดํฌํด์ผ ํ๊ธฐ ๋๋ฌธ....
๊ฒฐ๊ตญ ๋ฌธ์ ํ๊ธฐ๋ฅผ ํฌ๊ธฐํ์ง๋ง ์ด ์ฐ์ฐํจ(๋ถ๋ช ๋๋ ์ ํ์๋๋ฐ ์?!)์ ์ด๊ธธ ์๊ฐ ์๋๋ผ...
๊ทธ๋์ ๋ช ๋ฌ๋ง์ ๋ค์ ํ์ด๋ดค๋๋ ๋ ์ฉ ๋๋์ด ํ๋ ธ๋ค. ๋ถ๋ช ๋๊ฐ์ ๋ก์ง์ผ๋ก ์ ๊ทผํ๋ ๊ฒ ๊ฐ์๋ฐ ์์ ์๋ ๋์ฒด ๋ญ์ ๋งํ๋ ๊ฑธ๊น?(ใ ใ )
์๋ฌดํผ....ํฌ๊ธฐํ๋ ๋ฌธ์ ๋ฅผ ๋ค์ ํ์ด๋ด์ ๊ธฐ๋ถ์ด ์ข๋ค~
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/** https://www.acmicpc.net/problem/19237 */
public class Main_๋ฐฑ์ค_19237_์ด๋ฅธ์์ด_๊ณจ๋2 {
static class SHARK {
int num, dir, r, c;
public SHARK(int num, int dir, int r, int c) {
this.num = num;
this.dir = dir;
this.r = r;
this.c = c;
}
}
static int[] dr = {-1,1,0,0};
static int[] dc = {0,0,-1,1};
static int N, M, K;
static int[][][] map;
static int[][][] priorities;
static SHARK[] sharks;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
// [N][N][0]:SHARK NUMBER, [N][N][1]:INPUT TIME
map = new int[N][N][2];
sharks = new SHARK[M+1];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
int n = Integer.parseInt(st.nextToken());
if(n!=0){ //์์ด ๋ฐ๊ฒฌ
sharks[n] = new SHARK(n,0,i,j);
map[i][j][0] = n;
map[i][j][1] = K;
}
}
}//map input
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= M; i++) {
int dir = Integer.parseInt(st.nextToken())-1;
sharks[i].dir = dir;
}//shark current direction input
priorities = new int[M+1][4][4];
for (int i = 1; i <= M; i++) {
for (int j = 0; j < 4; j++) {
st = new StringTokenizer(br.readLine());
for (int k = 0; k < 4; k++) {
priorities[i][j][k] = Integer.parseInt(st.nextToken())-1;
}
}
}//direction priorities input
int time=0, cnt=M;
int[][] visited = new int[N][N];
while (time<1000){
time++;
// ์ด๋์์น ๊ธฐ๋ก ๋ฐฐ์ด ์ด๊ธฐํ
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
visited[i][j] = 0;
}
}
// ์์ด ์ด๋ ์์: 1๋ฒ๋ถํฐ
for (int i = 1; i <= M; i++) {
// ์ด๋ฏธ ์ซ๊ฒจ๋ ์์ด์ธ์ง ํ์ธ
if(sharks[i]==null) continue;
// ์ ์์ด๋ถํฐ ์์ง์ด๊ธฐ(์์ ๋ฒํธ)
int shark = i;
int dir = sharks[i].dir;
int sharkR = sharks[i].r;
int sharkC = sharks[i].c;
boolean flag = false;
// 1. ์ฃผ๋ณ์ ๋น ๊ณณ์ ์ฐพ๋๋ค.
int nr = sharkR, nc = sharkC, newDir = dir;
for (int j = 0; j < 4; j++) {//์ฌ๋ฐฉํ์
newDir = priorities[shark][dir][j];
nr = sharkR + dr[newDir];
nc = sharkC + dc[newDir];
if(nr<0||nc<0||nr>=N||nc>=N|| map[nr][nc][1]>=time) continue;
flag = true;
break;
}
// 2. ๋น ๊ณณ์ด ์์ผ๋ฉด ์์ ์ ๋์๊ฐ ์๋ ๊ณณ์ ์ก๋๋ค.
if(!flag){
for (int j = 0; j < 4; j++) {//์ฌ๋ฐฉํ์
newDir = priorities[shark][dir][j];
nr = sharkR + dr[newDir];
nc = sharkC + dc[newDir];
if(nr<0||nc<0||nr>=N||nc>=N||map[nr][nc][0]!=shark) continue;
else break;
}
}
//๊ฒน์น๋ ์์ด๊ฐ ์๋์ง ํ์ธ
if(visited[nr][nc]!=0){
sharks[i] = null;
cnt --;
continue;
}
else visited[nr][nc] = shark;
//์์ด์์น ์
๋ฐ์ดํธ
sharks[i].r = nr;
sharks[i].c = nc;
sharks[i].dir = newDir;
}//end of shark's movement
// 3. ์ด๋ํ ์์น๋ก ์ง๋ ์ ๋ณด ์
๋ฐ์ดํธ
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(visited[i][j]==0) continue;
map[i][j][0] = visited[i][j];
map[i][j][1] = time+K;
}
}
if(time>1000){
time=-1;
break;
}
if(cnt==1) break;
}//end of endless loop
System.out.println(time);
}//end of main
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ