Algorithm/Programmers

[JavaScript] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์นด๋“œ ์ง ๋งž์ถ”๊ธฐ

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2022. 8. 31. 00:40

[๋ฌธ์ œ]

https://school.programmers.co.kr/learn/courses/30/lessons/72415

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž์ธ ๋ฒ ๋กœ๋‹ˆ๋Š” ๊ฐœ๋ฐœ ์—ฐ์Šต์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์นด๋“œ ์ง๋งž์ถ”๊ธฐ ๋ณด๋“œ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด ํ™”๋ฉด์—๋Š” ์นด๋“œ 16์žฅ์ด ๋’ท๋ฉด์„ ์œ„๋กœํ•˜์—ฌ 4 x 4 ํฌ๊ธฐ์˜ ๊ฒฉ์ž ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์นด๋“œ์˜ ์•ž๋ฉด์—๋Š” ์นด์นด์˜คํ”„๋ Œ์ฆˆ ์บ๋ฆญํ„ฐ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์œผ๋ฉฐ, 8๊ฐ€์ง€์˜ ์บ๋ฆญํ„ฐ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง„ ์นด๋“œ๊ฐ€ ๊ฐ๊ธฐ 2์žฅ์”ฉ ํ™”๋ฉด์— ๋ฌด์ž‘์œ„๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์œ ์ €๊ฐ€ ์นด๋“œ๋ฅผ 2์žฅ ์„ ํƒํ•˜์—ฌ ์•ž๋ฉด์œผ๋กœ ๋’ค์ง‘์—ˆ์„ ๋•Œ ๊ฐ™์€ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง„ ์นด๋“œ๋ฉด ํ•ด๋‹น ์นด๋“œ๋Š” ๊ฒŒ์ž„ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๋ฉฐ, ๊ฐ™์€ ๊ทธ๋ฆผ์ด ์•„๋‹ˆ๋ผ๋ฉด ์›๋ž˜ ์ƒํƒœ๋กœ ๋’ท๋ฉด์ด ๋ณด์ด๋„๋ก ๋’ค์ง‘ํž™๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ์นด๋“œ๋ฅผ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•˜๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„์—์„œ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์นด๋“œ๋Š” ์ปค์„œ๋ฅผ ์ด์šฉํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ปค์„œ๋Š” 4 x 4 ํ™”๋ฉด์—์„œ ์œ ์ €๊ฐ€ ์„ ํƒํ•œ ํ˜„์žฌ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” "๊ตต๊ณ  ๋นจ๊ฐ„ ํ…Œ๋‘๋ฆฌ ์ƒ์ž"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค์„œ๋Š” [Ctrl] ํ‚ค์™€ ๋ฐฉํ–ฅํ‚ค์— ์˜ํ•ด ์ด๋™๋˜๋ฉฐ ํ‚ค ์กฐ์ž‘๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ๋ฐฉํ–ฅํ‚ค ←, ↑, ↓, → ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ˆ„๋ฅด๋ฉด, ์ปค์„œ๊ฐ€ ๋ˆ„๋ฅธ ํ‚ค ๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • [Ctrl] ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ์ƒํƒœ์—์„œ ๋ฐฉํ–ฅํ‚ค ←, ↑, ↓, → ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ˆ„๋ฅด๋ฉด, ๋ˆ„๋ฅธ ํ‚ค ๋ฐฉํ–ฅ์— ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์นด๋“œ๋กœ ํ•œ๋ฒˆ์— ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      • ๋งŒ์•ฝ, ํ•ด๋‹น ๋ฐฉํ–ฅ์— ์นด๋“œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด ๊ทธ ๋ฐฉํ–ฅ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์นธ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ, ๋ˆ„๋ฅธ ํ‚ค ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ ์นด๋“œ ๋˜๋Š” ๋นˆ ๊ณต๊ฐ„์ด ์—†์–ด ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ปค์„œ๋Š” ์›€์ง์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•œ ์นด๋“œ๋ฅผ ๋’ค์ง‘๊ธฐ ์œ„ํ•ด์„œ๋Š” [Enter] ํ‚ค๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • [Enter] ํ‚ค๋ฅผ ์ž…๋ ฅํ•ด์„œ ์นด๋“œ๋ฅผ ๋’ค์ง‘์—ˆ์„ ๋•Œ
      • ์•ž๋ฉด์ด ๋ณด์ด๋Š” ์นด๋“œ๊ฐ€ 1์žฅ ๋ฟ์ด๋ผ๋ฉด ๊ทธ๋ฆผ์„ ๋งž์ถœ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‘๋ฒˆ์งธ ์นด๋“œ๋ฅผ ๋’ค์ง‘์„ ๋•Œ ๊นŒ์ง€ ์•ž๋ฉด์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
      • ์•ž๋ฉด์ด ๋ณด์ด๋Š” ์นด๋“œ๊ฐ€ 2์žฅ์ด ๋œ ๊ฒฝ์šฐ, ๋‘๊ฐœ์˜ ์นด๋“œ์— ๊ทธ๋ ค์ง„ ๊ทธ๋ฆผ์ด ๊ฐ™์œผ๋ฉด ํ•ด๋‹น ์นด๋“œ๋“ค์ด ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๋ฉฐ, ๊ทธ๋ฆผ์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๋‘ ์นด๋“œ ๋ชจ๋‘ ๋’ท๋ฉด์ด ๋ณด์ด๋„๋ก ๋‹ค์‹œ ๋’ค์ง‘ํž™๋‹ˆ๋‹ค.

"๋ฒ ๋กœ๋‹ˆ"๋Š” ๊ฒŒ์ž„ ์ง„ํ–‰ ์ค‘ ์นด๋“œ์˜ ์ง์„ ๋งž์ถฐ ๋ช‡ ์žฅ ์ œ๊ฑฐ๋œ ์ƒํƒœ์—์„œ ์นด๋“œ ์•ž๋ฉด์˜ ๊ทธ๋ฆผ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ๋‚จ์€ ์นด๋“œ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ํ‚ค ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค ์กฐ์ž‘ ํšŸ์ˆ˜๋Š” ๋ฐฉํ–ฅํ‚ค์™€ [Enter] ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋Š” ๋™์ž‘์„ ๊ฐ๊ฐ ์กฐ์ž‘ ํšŸ์ˆ˜ 1๋กœ ๊ณ„์‚ฐํ•˜๋ฉฐ, [Ctrl] ํ‚ค์™€ ๋ฐฉํ–ฅํ‚ค๋ฅผ ํ•จ๊ป˜ ๋ˆ„๋ฅด๋Š” ๋™์ž‘ ๋˜ํ•œ ์กฐ์ž‘ ํšŸ์ˆ˜ 1๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์นด๋“œ๊ฐ€ ๋ช‡ ์žฅ ์ œ๊ฑฐ๋œ ์ƒํƒœ์˜ ๊ฒŒ์ž„ ํ™”๋ฉด์—์„œ ์ปค์„œ๋ฅผ ์ด๋™ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋นˆ ์นธ์€ ์ด๋ฏธ ์นด๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์—†์–ด์ง„ ์นธ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง„ ์นธ์€ ์นด๋“œ ์•ž ๋ฉด์— ๊ทธ๋ ค์ง„ ๊ทธ๋ฆผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.


์˜ˆ์‹œ์—์„œ ์ปค์„œ๋Š” ๋‘๋ฒˆ์งธ ํ–‰, ์ฒซ๋ฒˆ์งธ ์—ด ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


[Enter] ์ž…๋ ฅ, ↓ ์ด๋™, [Ctrl]+→ ์ด๋™, [Enter] ์ž…๋ ฅ = ํ‚ค ์กฐ์ž‘ 4ํšŒ


[Ctrl]+↑ ์ด๋™, [Enter] ์ž…๋ ฅ, [Ctrl]+← ์ด๋™, [Ctrl]+↓ ์ด๋™, [Enter] ์ž…๋ ฅ = ํ‚ค ์กฐ์ž‘ 5ํšŒ


[Ctrl]+→ ์ด๋™, [Enter] ์ž…๋ ฅ, [Ctrl]+↑ ์ด๋™, [Ctrl]+← ์ด๋™, [Enter] ์ž…๋ ฅ = ํ‚ค ์กฐ์ž‘ 5ํšŒ

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ปค์„œ๋ฅผ ์ด๋™ํ•˜์—ฌ ์นด๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ๋ฆผ์„ ๋งž์ถ”์–ด ์นด๋“œ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด 14๋ฒˆ(๋ฐฉํ–ฅ ์ด๋™ 8๋ฒˆ, [Enter] ํ‚ค ์ž…๋ ฅ 6๋ฒˆ)์˜ ํ‚ค ์กฐ์ž‘ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


[๋ฌธ์ œ]

ํ˜„์žฌ ์นด๋“œ๊ฐ€ ๋†“์ธ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ๋ฐฐ์—ด board์™€ ์ปค์„œ์˜ ์ฒ˜์Œ ์œ„์น˜ r, c๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์นด๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

[์ œํ•œ์‚ฌํ•ญ]

  • board๋Š” 4 x 4 ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • board ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” 0 ์ด์ƒ 6 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • 0์€ ์นด๋“œ๊ฐ€ ์ œ๊ฑฐ๋œ ๋นˆ ์นธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • 1 ๋ถ€ํ„ฐ 6๊นŒ์ง€์˜ ์ž์—ฐ์ˆ˜๋Š” 2๊ฐœ์”ฉ ๋“ค์–ด์žˆ์œผ๋ฉฐ ๊ฐ™์€ ์ˆซ์ž๋Š” ๊ฐ™์€ ๊ทธ๋ฆผ์˜ ์นด๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ๋’ค์ง‘์„ ์นด๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ(board์˜ ๋ชจ๋“  ์›์†Œ๊ฐ€ 0์ธ ๊ฒฝ์šฐ)๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • r์€ ์ปค์„œ์˜ ์ตœ์ดˆ ์„ธ๋กœ(ํ–‰) ์œ„์น˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • c๋Š” ์ปค์„œ์˜ ์ตœ์ดˆ ๊ฐ€๋กœ(์—ด) ์œ„์น˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • r๊ณผ c๋Š” 0 ์ด์ƒ 3 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ฒŒ์ž„ ํ™”๋ฉด์˜ ์ขŒ์ธก ์ƒ๋‹จ์ด (0, 0), ์šฐ์ธก ํ•˜๋‹จ์ด (3, 3) ์ž…๋‹ˆ๋‹ค.

[์ž…์ถœ๋ ฅ ์˜ˆ]boardrcresult
[[1,0,0,3],[2,0,0,0],[0,0,0,2],[3,0,1,0]] 1 0 14
[[3,0,0,2],[0,0,1,0],[0,1,0,0],[2,0,0,3]] 0 1 16
์ž…์ถœ๋ ฅ ์˜ˆ์— ๋Œ€ํ•œ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๊ฒŒ์ž„ ํ™”๋ฉด์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„ ๊ฒŒ์ž„ ํ™”๋ฉด์—์„œ ๋ชจ๋“  ์นด๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์€ 16๋ฒˆ ์ž…๋‹ˆ๋‹ค.

[ํ’€์ด]

์ˆœ์—ด๊ณผ bfs๋ฅผ ๋ชจ๋‘ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

1. ์นด๋“œ์˜ ์ˆœ์„œ์Œ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ 1๋ฒˆ์ฒ˜๋Ÿผ ์นด๋“œ์˜ ์ข…๋ฅ˜๊ฐ€ 1, 2, 3 ์ผ๋•Œ, ์–ด๋–ค ์นด๋“œ์˜ ์ˆœ์„œ๋กœ ๋’ค์ง‘์–ด์•ผ ๋น ๋ฅธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— 1, 2, 3์˜ ์ˆœ์„œ์Œ์„ ๋ชจ๋‘ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

 

์นด๋“œ๋Š” ๋ชจ๋‘ ์ง์„ ์ด๋ฃจ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 1, 2, 3 ์ˆœ์„œ๋กœ ๋ฝ‘๋Š”๋‹ค๋ฉด ์‚ฌ์‹ค 1, 1, 2, 2, 3, 3 ์ˆœ์„œ๋กœ ๋ฝ‘์•„์„œ bfs๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

2. bfs๋ฅผ ํ†ตํ•ด ์ˆœ์„œ์Œ ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋Œ€๋กœ ์นด๋“œ๋ฅผ ํ•œ๊ฐœ์”ฉ ์ฐพ์•„๋‚˜๊ฐ‘๋‹ˆ๋‹ค.

 

ํ๋ฅผ ์ด์šฉํ•œ bfs๋ฅผ ์ง„ํ–‰ํ• ๋•Œ, ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ctrl์„ ๋ˆ„๋ฅด๊ณ  ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ 4๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™
  • ํ•œ์นธ์”ฉ ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ 4๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™

๋”ฐ๋ผ์„œ ์ด 8๊ฐ€์ง€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉฐ ์นด๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

 

[์ฝ”๋“œ]

function solution(board, r, c) {
    var answer = Infinity;
    const n = board.length;
    const set = new Set();
    for(let i=0;i<n;i++) {
        for(let j=0;j<n;j++) {
            if(board[i][j] === 0) {
                continue;
            }
            set.add(board[i][j]);
        }
    }
    
    const bfs = (arr, boardArr) => {
        const dx = [1, -1, 0, 0];
        const dy = [0, 0, 1, -1];
        let queue = [];
        queue.push([r, c, 0]);
        
        let cnt = 0;
        let total = 0;
        while(queue.length !== 0) {
            const [x, y, move] = queue.shift();
            if(boardArr[x][y] === arr[cnt]) {
                queue = [];
                boardArr[x][y] = 0;
                // ์นด๋“œ๋ฅผ ์ฐพ์•„์„œ ๋’ค์ง‘๊ธฐ
                total += move + 1;
                queue.push([x, y, 0]);
                cnt++;
                if(cnt === arr.length) {
                    return total;
                }
                continue;
            }
            // ํ•œ์นธ์”ฉ ์ด๋™
            for(let i=0;i<4;i++) {
                const [nx, ny] = [x + dx[i], y + dy[i]];
                if(nx < 0 || ny < 0 || nx >= n || ny >= n) {
                    continue;
                }
                queue.push([nx, ny, move + 1]);
            }
            // ์ปจํŠธ๋กค + ์ด๋™
            // ํ•œ์นธ์”ฉ ์ด๋™
            for(let i=0;i<4;i++) {
                let [cx, cy] = [x, y];
                while(true) {
                    cx += dx[i];
                    cy += dy[i];
                    if(cx < 0 || cy < 0 || cx >= n || cy >= n) {
                        queue.push([cx - dx[i], cy - dy[i], move + 1]);
                        break;
                    }
                    if(boardArr[cx][cy] > 0) {
                        queue.push([cx, cy, move + 1]);
                        break;
                    }
                }
            }
        }
    }
    
    // ์นด๋“œ ์‚ญ์ œํ•  ์ˆœ์„œ์Œ ๊ตฌํ•จ
    const makeCardSet = (arr, cnt) => {
        if(cnt === set.size*2) {
            // ์ˆœ์„œ์Œ์ด ์™„์„ฑ๋˜๋ฉด ํ•ด๋‹น ์ˆœ์„œ๋Œ€๋กœ bfs ์ง„ํ–‰
            const boardArr = Array.from({length: n}, () => Array(n).fill(0));
            for(let i=0;i<n;i++) {
                for(let j=0;j<n;j++) {
                    boardArr[i][j] = board[i][j];
                }
            }
            const ret = bfs(arr, boardArr);
            if(answer > ret) {
                answer = ret;
            }
            return;
        }
        set.forEach((i) => {
            if(!arr.includes(i)) {
                arr[cnt] = i;
                arr[cnt+1] = i;
                makeCardSet(arr, cnt + 2);
                arr[cnt] = 0;
                arr[cnt+1] = 0;
            }
        });
    }
    
    makeCardSet([], 0);
    
    return answer;
}