๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 9์ฃผ์ฐจ] 19237 ์–ด๋ฅธ์ƒ์–ด ๊ณจ๋“œ3 - ์ž๋ฐ”(Java)/ ์‚ผ์„ฑ ๊ธฐ์ถœ๋ฌธ์ œ/ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/19237

 

19237๋ฒˆ: ์–ด๋ฅธ ์ƒ์–ด

์ฒซ ์ค„์—๋Š” N, M, k๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฒฉ์ž์˜ ๋ชจ์Šต์ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ์นธ์ด๊ณ , 0์ด ์•„๋‹Œ ์ˆ˜ x๋Š” x๋ฒˆ ์ƒ์–ด๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์นธ์„ ์˜๋ฏธ

www.acmicpc.net

๋”๋ณด๊ธฐ

๋ฌธ์ œ

์ฒญ์†Œ๋…„ ์ƒ์–ด๋Š” ๋”์šฑ ์ž๋ผ ์–ด๋ฅธ ์ƒ์–ด๊ฐ€ ๋˜์—ˆ๋‹ค. ์ƒ์–ด๊ฐ€ ์‚ฌ๋Š” ๊ณต๊ฐ„์— ๋” ์ด์ƒ ๋ฌผ๊ณ ๊ธฐ๋Š” ์˜ค์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ƒ์–ด๋“ค๋งŒ์ด ๋‚จ์•„์žˆ๋‹ค. ์ƒ์–ด์—๋Š” 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

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ