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

Algorithm

[Algorithm] ์‚ฌ๋ผ์ง€๋Š” ๋ฐœํŒ

๐Ÿ“‹ ๋ฌธ์ œ

ํ”Œ๋ ˆ์ด์–ด A์™€ ํ”Œ๋ ˆ์ด์–ด B๊ฐ€ ์„œ๋กœ ๊ฒŒ์ž„์„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ๊ฒŒ์ž„์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์–‘ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์บ๋ฆญํ„ฐ๋ฅผ ๋ช‡ ๋ฒˆ ์›€์ง์ด๊ฒŒ ๋ ์ง€ ์˜ˆ์ธกํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ”Œ๋ ˆ์ด์–ด๋Š” ์ž์‹ ์˜ ์บ๋ฆญํ„ฐ ํ•˜๋‚˜๋ฅผ ๋ณด๋“œ ์œ„์— ์˜ฌ๋ ค๋†“๊ณ  ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ๋ณด๋“œ๋Š” 1x1 ํฌ๊ธฐ ์ •์‚ฌ๊ฐ ๊ฒฉ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ณด๋“œ ์•ˆ์—๋Š” ๋ฐœํŒ์ด ์žˆ๋Š” ๋ถ€๋ถ„๊ณผ ์—†๋Š” ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœํŒ์ด ์žˆ๋Š” ๊ณณ์—๋งŒ ์บ๋ฆญํ„ฐ๊ฐ€ ์„œ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฒ˜์Œ ์บ๋ฆญํ„ฐ๋ฅผ ์˜ฌ๋ ค๋†“๋Š” ๊ณณ์€ ํ•ญ์ƒ ๋ฐœํŒ์ด ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๋Š” ๋ฐœํŒ์ด ์žˆ๋Š” ๊ณณ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณด๋“œ ๋ฐ–์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐŸ๊ณ  ์žˆ๋˜ ๋ฐœํŒ์€ ๊ทธ ์œ„์— ์žˆ๋˜ ์บ๋ฆญํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฐœํŒ์„ ๋ฐž์Œ๊ณผ ๋™์‹œ์— ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์–‘ ํ”Œ๋ ˆ์ด์–ด๋Š” ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์ž๊ธฐ ์ฐจ๋ก€์— ์ž์‹ ์˜ ์บ๋ฆญํ„ฐ๋ฅผ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ 4๊ฐœ์˜ ์นธ ์ค‘์—์„œ ๋ฐœํŒ์ด ์žˆ๋Š” ์นธ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ํŒจ์ž์™€ ์Šน์ž๊ฐ€ ์ •ํ•ด์ง€๋ฉฐ, ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

  • ์›€์ง์ผ ์ฐจ๋ก€์ธ๋ฐ ์บ๋ฆญํ„ฐ์˜ ์ƒํ•˜์ขŒ์šฐ ์ฃผ๋ณ€ 4์นธ์ด ๋ชจ๋‘ ๋ฐœํŒ์ด ์—†๊ฑฐ๋‚˜ ๋ณด๋“œ ๋ฐ–์ด๋ผ์„œ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ฐจ๋ก€ ํ”Œ๋ ˆ์ด์–ด๋Š” ํŒจ๋ฐฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘ ์บ๋ฆญํ„ฐ๊ฐ€ ๊ฐ™์€ ๋ฐœํŒ ์œ„์— ์žˆ์„ ๋•Œ, ์ƒ๋Œ€ ํ”Œ๋ ˆ์ด์–ด์˜ ์บ๋ฆญํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๋ฐœํŒ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ž์‹ ์˜ ์บ๋ฆญํ„ฐ๊ฐ€ ์„œ์žˆ๋˜ ๋ฐœํŒ์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜๋ฉด ํŒจ๋ฐฐํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„์€ ํ•ญ์ƒ ํ”Œ๋ ˆ์ด์–ด A๊ฐ€ ๋จผ์ € ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์–‘ ํ”Œ๋ ˆ์ด์–ด๋Š” ์ตœ์ ์˜ ํ”Œ๋ ˆ์ด๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด๊ธธ ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด๋Š” ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์Šน๋ฆฌํ•˜๋„๋ก ํ”Œ๋ ˆ์ดํ•˜๊ณ , ์งˆ ์ˆ˜๋ฐ–์— ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด๋Š” ์ตœ๋Œ€ํ•œ ์˜ค๋ž˜ ๋ฒ„ํ‹ฐ๋„๋ก ํ”Œ๋ ˆ์ดํ•ฉ๋‹ˆ๋‹ค. '์ด๊ธธ ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด'๋Š” ์‹ค์ˆ˜๋งŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ญ์ƒ ์ด๊ธฐ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, '์งˆ ์ˆ˜๋ฐ–์— ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด'๋Š” ์ตœ์„ ์„ ๋‹คํ•ด๋„ ์ƒ๋Œ€๊ฐ€ ์‹ค์ˆ˜ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ญ์ƒ ์งˆ ์ˆ˜๋ฐ–์— ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์˜ค๋ž˜ ๋ฒ„ํ‹ด๋‹ค๋Š” ๊ฒƒ์€ ์–‘ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์บ๋ฆญํ„ฐ๋ฅผ ์›€์ง์ด๋Š” ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ดˆ๊ธฐ ๋ณด๋“œ์˜ ์ƒํƒœ์™€ ๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.


์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ํ”Œ๋ ˆ์ด์–ด A๋Š” ์‹ค์ˆ˜๋งŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ญ์ƒ ์ด๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”Œ๋ ˆ์ด์–ด A๋Š” ์ด๊ธธ ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด์ด๋ฉฐ, B๋Š” ์งˆ ์ˆ˜๋ฐ–์— ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ A์™€ B๊ฐ€ ์ตœ์ ์˜ ํ”Œ๋ ˆ์ด๋ฅผ ํ•˜๋Š” ๊ณผ์ •์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

  1. ํ”Œ๋ ˆ์ด์–ด A๊ฐ€ ์ดˆ๊ธฐ ์œ„์น˜ (1, 0)์—์„œ (1, 1)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์–ด A๊ฐ€ (0, 0)์ด๋‚˜ (2, 0)์œผ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ ์Šน๋ฆฌ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌด์กฐ๊ฑด ์ด๊ธธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” (1, 1)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ”Œ๋ ˆ์ด์–ด B๋Š” (1, 1)๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ, ๋ฐ”๋กœ ๋‹ค์Œ ์ฐจ๋ก€์— A๊ฐ€ ์œ„ ๋˜๋Š” ์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋ฐœํŒ์ด ์—†์–ด์ ธ ํŒจ๋ฐฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์งˆ ์ˆ˜๋ฐ–์— ์—†๋Š” ํ”Œ๋ ˆ์ด์–ด๋Š” ์ตœ๋Œ€ํ•œ ์˜ค๋ž˜ ๋ฒ„ํ‹ฐ๋„๋ก ํ”Œ๋ ˆ์ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— (1, 1)๋กœ ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (1, 2)์—์„œ ์œ„์ชฝ ์นธ์ธ (0, 2)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. A๊ฐ€ (1, 1)์—์„œ (0, 1)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  4. B์—๊ฒŒ๋Š” ๋‚จ์€ ์„ ํƒ์ง€๊ฐ€ (0, 1)๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ (0, 2)์—์„œ (0, 1)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  5. A๊ฐ€ (0, 1)์—์„œ (0, 0)์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋™์„ ์™„๋ฃŒํ•จ๊ณผ ๋™์‹œ์— B๊ฐ€ ์„œ์žˆ๋˜ (0, 1)์˜ ๋ฐœํŒ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. B๊ฐ€ ํŒจ๋ฐฐํ•ฉ๋‹ˆ๋‹ค.
  6. ๋งŒ์•ฝ ๊ณผ์ • 2์—์„œ B๊ฐ€ ์•„๋ž˜์ชฝ ์นธ์ธ (2, 2)๋กœ ์ด๋™ํ•˜๋”๋ผ๋„ A๋Š” (2, 1)๋กœ ์ด๋™ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ B๊ฐ€ (2, 1)๋กœ ์ด๋™, ๋‹ค์Œ ์ฐจ๋ก€์— A๊ฐ€ (2, 0)์œผ๋กœ ์ด๋™ํ•˜๋ฉด B๊ฐ€ ํŒจ๋ฐฐํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ ์–‘ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ตœ์ ์˜ ํ”Œ๋ ˆ์ด๋ฅผ ํ–ˆ์„ ๊ฒฝ์šฐ, ์บ๋ฆญํ„ฐ์˜ ์ด๋™ ํšŸ์ˆ˜ ํ•ฉ์€ 5์ž…๋‹ˆ๋‹ค. ์ตœ์ ์˜ ํ”Œ๋ ˆ์ด๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ์ด๋™ํ•œ ํšŸ์ˆ˜๋Š” ๋ชจ๋‘ 5๋กœ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ฒŒ์ž„ ๋ณด๋“œ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด board์™€ ํ”Œ๋ ˆ์ด์–ด A์˜ ์บ๋ฆญํ„ฐ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด aloc, ํ”Œ๋ ˆ์ด์–ด B์˜ ์บ๋ฆญํ„ฐ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด bloc์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์–‘ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ตœ์ ์˜ ํ”Œ๋ ˆ์ด๋ฅผ ํ–ˆ์„ ๋•Œ, ๋‘ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ธ ํšŸ์ˆ˜์˜ ํ•ฉ์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 1 ≤ board์˜ ์„ธ๋กœ ๊ธธ์ด ≤ 5
  • 1 ≤ board์˜ ๊ฐ€๋กœ ๊ธธ์ด ≤ 5
  • board์˜ ์›์†Œ๋Š” 0 ๋˜๋Š” 1์ž…๋‹ˆ๋‹ค.
    • 0์€ ๋ฐœํŒ์ด ์—†์Œ์„, 1์€ ๋ฐœํŒ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ๊ฒŒ์ž„ ๋ณด๋“œ์˜ ์ขŒ์ธก ์ƒ๋‹จ ์ขŒํ‘œ๋Š” (0, 0), ์šฐ์ธก ํ•˜๋‹จ ์ขŒํ‘œ๋Š” (board์˜ ์„ธ๋กœ ๊ธธ์ด - 1, board์˜ ๊ฐ€๋กœ ๊ธธ์ด - 1)์ž…๋‹ˆ๋‹ค.
  • aloc๊ณผ bloc์€ ๊ฐ๊ฐ ํ”Œ๋ ˆ์ด์–ด A์˜ ์บ๋ฆญํ„ฐ์™€ ํ”Œ๋ ˆ์ด์–ด B์˜ ์บ๋ฆญํ„ฐ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ขŒํ‘œ๊ฐ’์ด๋ฉฐ [r, c] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • r์€ ๋ช‡ ๋ฒˆ์งธ ํ–‰์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • 0 ≤ r < board์˜ ์„ธ๋กœ ๊ธธ์ด
    • c๋Š” ๋ช‡ ๋ฒˆ์งธ ์—ด์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • 0 ≤ c < board์˜ ๊ฐ€๋กœ ๊ธธ์ด
    • ์ดˆ๊ธฐ ๋ณด๋“œ์˜ aloc๊ณผ bloc ์œ„์น˜๋Š” ํ•ญ์ƒ ๋ฐœํŒ์ด ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
    • aloc๊ณผ bloc์ด ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ๋Œ€ ํ”Œ๋ ˆ์ด์–ด์˜ ์บ๋ฆญํ„ฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

[[1, 1, 1], [1, 1, 1], [1, 1, 1]] [1, 0] [1, 2] 5
[[1, 1, 1], [1, 0, 1], [1, 1, 1]] [1, 0] [1, 2] 4
[[1, 1, 1, 1, 1]] [0, 0] [0, 4] 4
[[1]] [0, 0] [0, 0] 0

 

โœ๏ธ ํ’€์ด

board์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๊ณ  DFS๋ฅผ ๋Œ๋ ค ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

 

๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์ฃผ์˜ํ•  ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ด๊ธฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๊ธฐ๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ, ์ง€๋Š” ๊ฒฝ์šฐ์—๋„ ์›€์ง์ž„์„ ์ตœ๋Œ€ํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ์–ด๋–ค ํ•œ ์ชฝ์ด ์ด๊ธฐ๋Š” ๊ฒฝ์šฐ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ์ด๊ธฐ๋Š” ์‚ฌ๋žŒ์ด ๊ฒŒ์ž„์„ ์ฃผ๋„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ์ด๊ธฐ๋Š” ๊ฒฝ์šฐ์—์„œ๋Š” ์›€์ง์ž„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ์ตœ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก min, max๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.

 

DFS ํ•จ์ˆ˜๋Š” ์žฌ๊ท€ํ˜•์‹์œผ๋กœ ์ƒ๋Œ€์™€ ์ž์‹ ์ด ์›€์ง์ด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋Œ๋ ธ๋‹ค. ๋จผ์ € ์ž๊ธฐ ์ž์‹ ์ด ์„œ์žˆ๋Š” ๋ฐœํŒ์ด ์—†์–ด์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ์„œ์žˆ๋Š” ์œ„์น˜์˜ ๋ฐœํŒ์ด 0์ด๋ผ๋ฉด ์ด๋•Œ ์ง„๋‹ค๋Š” ์˜๋ฏธ์˜ false์™€ 0์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.(์ด๊ธฐ๋Š” ๊ฒฝ์šฐ์™€ ์ง€๋Š” ๊ฒฝ์šฐ์— ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—) 

 

์ฃผ๋ณ€์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐœํŒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•˜๋ฉฐ DFS๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœํ–ˆ๋‹ค. ์ด๋•Œ ์ƒ๋Œ€๋ฐฉ๊ณผ ๋‚˜์˜ ์ฐจ๋ก€๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ณ  ๋งŒ์•ฝ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐœํŒ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ง€๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ false์™€ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ด ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œ๋กœ res๋ผ๋Š” ๋ฐฐ์—ด์— ์ €์žฅํ•ด๋’€๋Š”๋ฐ ๋ชจ๋“  ๊ฒฝ์šฐ์ค‘์—์„œ ์ด๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ตœ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๊ณ  ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ œ์ผ ํฐ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜ํ•œ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์ž๊ธฐ ์ž์‹ ์ด ์›€์ง์ธ ํšŸ์ˆ˜๋ฅผ ๋”ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— +1 ํ•ด์คฌ๋‹ค.

 

์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด A ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋จผ์ € ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•  ๋•Œ ์Šน๋ฆฌ์—ฌ๋ถ€์™€ ์›€์ง์ธ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ณ  ์›€์ง์ธ ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

โŒจ๏ธ ์ฝ”๋“œ

function solution(board, aloc, bloc) {
  const dx = [-1, 0, 1, 0];
  const dy = [0, 1, 0, -1];

  function dfs(board, movePlayer, waitPlayer) {
    const res = [];

    const [x, y] = movePlayer;
    if (!board[x][y]) return [false, 0];
    board[x][y] = 0;

    let isDontMove = true;
    for (let k = 0; k < 4; k++) {
      const nextX = x + dx[k];
      const nextY = y + dy[k];
      if (nextX < 0 || nextX >= board.length || nextY < 0 || nextY >= board[0].length) continue;
      if (!board[nextX][nextY]) continue;

      isDontMove = false;
      res.push(dfs(board, waitPlayer, [nextX, nextY]));
    }
    board[x][y] = 1;

    if (isDontMove) return [false, 0];

    let canWin = false;
    let max = 0;
    let min = Infinity;
    for (let r of res) {
      const [isOpponentWin, cnt] = r;
      if (!isOpponentWin) canWin = true;

      if (!isOpponentWin) min = Math.min(min, cnt);
      else max = Math.max(max, cnt);
    }

    return canWin ? [true, min + 1] : [false, max + 1];
  }

  const [_, cnt] = dfs(board, aloc, bloc);
  return cnt;
}