๋ณธ ํ’€์ด๋Š” ํ”„๋กœ๋„๋‹˜์˜ ํ’€์ด๋ฅผ ํ•ด์„ํ•˜์˜€์Œ์„ ๋ฏธ๋ฆฌ ๋ฐํž™๋‹ˆ๋‹ค.

๐Ÿงก๋ฌธ์ œ ์„ค๋ช…

๋น™ํ•˜๊ฐ€ ๊นจ์ง€๋ฉด์„œ ์Šค๋…ธ์šฐํƒ€์šด์— ๋– ๋‚ด๋ ค ์˜จ "์ฃ ๋ฅด๋””"๋Š” ์ธ์ƒ 2๋ง‰์„ ์œ„ํ•ด ์ฃผํƒ ๊ฑด์ถ•์‚ฌ์—…์— ๋›ฐ์–ด๋“ค๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. "์ฃ ๋ฅด๋””"๋Š” ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฒฝ๋ฉด ๊ตฌ์กฐ๋ฌผ์„ ์ž๋™์œผ๋กœ ์„ธ์šฐ๋Š” ๋กœ๋ด‡์„ ๊ฐœ๋ฐœํ•  ๊ณ„ํš์ธ๋ฐ, ๊ทธ์— ์•ž์„œ ๋กœ๋ด‡์˜ ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์€ 2์ฐจ์› ๊ฐ€์ƒ ๋ฒฝ๋ฉด์— ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋ฅผ ์ด์šฉํ•œ ๊ตฌ์กฐ๋ฌผ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋Š” ๊ธธ์ด๊ฐ€ 1์ธ ์„ ๋ถ„์œผ๋กœ ํ‘œํ˜„๋˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋‘ฅ์€ ๋ฐ”๋‹ฅ ์œ„์— ์žˆ๊ฑฐ๋‚˜ ๋ณด์˜ ํ•œ์ชฝ ๋ ๋ถ€๋ถ„ ์œ„์— ์žˆ๊ฑฐ๋‚˜, ๋˜๋Š” ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ ์œ„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด๋Š” ํ•œ์ชฝ ๋ ๋ถ€๋ถ„์ด ๊ธฐ๋‘ฅ ์œ„์— ์žˆ๊ฑฐ๋‚˜, ๋˜๋Š” ์–‘์ชฝ ๋ ๋ถ€๋ถ„์ด ๋‹ค๋ฅธ ๋ณด์™€ ๋™์‹œ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ, ๋ฐ”๋‹ฅ์€ ๋ฒฝ๋ฉด์˜ ๋งจ ์•„๋ž˜ ์ง€๋ฉด์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

2์ฐจ์› ๋ฒฝ๋ฉด์€ n x n ํฌ๊ธฐ ์ •์‚ฌ๊ฐ ๊ฒฉ์ž ํ˜•ํƒœ์ด๋ฉฐ, ๊ฐ ๊ฒฉ์ž๋Š” 1 x 1 ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋งจ ์ฒ˜์Œ ๋ฒฝ๋ฉด์€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋Š” ๊ฒฉ์ž์„ ์˜ ๊ต์ฐจ์ ์— ๊ฑธ์น˜์ง€ ์•Š๊ณ , ๊ฒฉ์ž ์นธ์˜ ๊ฐ ๋ณ€์— ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋„๋ก ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋ฅผ ์„ค์น˜ํ•ด ๊ตฌ์กฐ๋ฌผ์„ ๋งŒ๋“  ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ๊ทธ๋ฆผ์€ ๋‹ค์Œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ตฌ์กฐ๋ฌผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  1. (1, 0)์—์„œ ์œ„์ชฝ์œผ๋กœ ๊ธฐ๋‘ฅ์„ ํ•˜๋‚˜ ์„ค์น˜ ํ›„, (1, 1)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. (2, 1)์—์„œ ์œ„์ชฝ์œผ๋กœ ๊ธฐ๋‘ฅ์„ ํ•˜๋‚˜ ์„ค์น˜ ํ›„, (2, 2)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. (5, 0)์—์„œ ์œ„์ชฝ์œผ๋กœ ๊ธฐ๋‘ฅ์„ ํ•˜๋‚˜ ์„ค์น˜ ํ›„, (5, 1)์—์„œ ์œ„์ชฝ์œผ๋กœ ๊ธฐ๋‘ฅ์„ ํ•˜๋‚˜ ๋” ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  4. (4, 2)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋ฅผ ์„ค์น˜ ํ›„, (3, 2)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ (4, 2)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋ฅผ ๋จผ์ € ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ , (3, 2)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋ฅผ ์„ค์น˜ํ•˜๋ ค ํ•œ๋‹ค๋ฉด 2๋ฒˆ ๊ทœ์น™์— ๋งž์ง€ ์•Š์œผ๋ฏ€๋กœ ์„ค์น˜๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ๋Š”๋ฐ ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋ฅผ ์‚ญ์ œํ•œ ํ›„์— ๋‚จ์€ ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋“ค ๋˜ํ•œ ์œ„ ๊ทœ์น™์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น ์ž‘์—…์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ฒฝ๋ฉด์˜ ํฌ๊ธฐ n, ๊ธฐ๋‘ฅ๊ณผ ๋ณด๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์ด ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด build_frame์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ ๊ตฌ์กฐ๋ฌผ์˜ ์ƒํƒœ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


๐Ÿ’›์ œํ•œ์‚ฌํ•ญ

  • n์€ 5 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • build_frame์˜ ์„ธ๋กœ(ํ–‰) ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • build_frame์˜ ๊ฐ€๋กœ(์—ด) ๊ธธ์ด๋Š” 4์ž…๋‹ˆ๋‹ค.
  • build_frame์˜ ์›์†Œ๋Š” [x, y, a, b]ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • x, y๋Š” ๊ธฐ๋‘ฅ, ๋ณด๋ฅผ ์„ค์น˜ ๋˜๋Š” ์‚ญ์ œํ•  ๊ต์ฐจ์ ์˜ ์ขŒํ‘œ์ด๋ฉฐ, [๊ฐ€๋กœ ์ขŒํ‘œ, ์„ธ๋กœ ์ขŒํ‘œ] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • a๋Š” ์„ค์น˜ ๋˜๋Š” ์‚ญ์ œํ•  ๊ตฌ์กฐ๋ฌผ์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, 0์€ ๊ธฐ๋‘ฅ, 1์€ ๋ณด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • b๋Š” ๊ตฌ์กฐ๋ฌผ์„ ์„ค์น˜ํ•  ์ง€, ํ˜น์€ ์‚ญ์ œํ•  ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ 0์€ ์‚ญ์ œ, 1์€ ์„ค์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ๋ฒฝ๋ฉด์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๊ธฐ๋‘ฅ, ๋ณด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • ๋ฐ”๋‹ฅ์— ๋ณด๋ฅผ ์„ค์น˜ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ๋ฌผ์€ ๊ต์ฐจ์  ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋Š” ์˜ค๋ฅธ์ชฝ, ๊ธฐ๋‘ฅ์€ ์œ„์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์„ค์น˜ ๋˜๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ๋ฌผ์ด ๊ฒน์น˜๋„๋ก ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์™€, ์—†๋Š” ๊ตฌ์กฐ๋ฌผ์„ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ตœ์ข… ๊ตฌ์กฐ๋ฌผ์˜ ์ƒํƒœ๋Š” ์•„๋ž˜ ๊ทœ์น™์— ๋งž์ถฐ return ํ•ด์ฃผ์„ธ์š”.
    • return ํ•˜๋Š” ๋ฐฐ์—ด์€ ๊ฐ€๋กœ(์—ด) ๊ธธ์ด๊ฐ€ 3์ธ 2์ฐจ์› ๋ฐฐ์—ด๋กœ, ๊ฐ ๊ตฌ์กฐ๋ฌผ์˜ ์ขŒํ‘œ๋ฅผ ๋‹ด๊ณ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • return ํ•˜๋Š” ๋ฐฐ์—ด์˜ ์›์†Œ๋Š” [x, y, a] ํ˜•์‹์ž…๋‹ˆ๋‹ค.
    • x, y๋Š” ๊ธฐ๋‘ฅ, ๋ณด์˜ ๊ต์ฐจ์  ์ขŒํ‘œ์ด๋ฉฐ, [๊ฐ€๋กœ ์ขŒํ‘œ, ์„ธ๋กœ ์ขŒํ‘œ] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • ๊ธฐ๋‘ฅ, ๋ณด๋Š” ๊ต์ฐจ์  ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ, ๋˜๋Š” ์œ„์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • a๋Š” ๊ตฌ์กฐ๋ฌผ์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, 0์€ ๊ธฐ๋‘ฅ, 1์€ ๋ณด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • return ํ•˜๋Š” ๋ฐฐ์—ด์€ x์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๋ฉฐ, x์ขŒํ‘œ๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ y์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.
    • x, y์ขŒํ‘œ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ ๊ธฐ๋‘ฅ์ด ๋ณด๋ณด๋‹ค ์•ž์— ์˜ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’š์ž…์ถœ๋ ฅ ์˜ˆ

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

๐Ÿ’™์ž…์ถœ๋ ฅ ์˜ˆ์— ๋Œ€ํ•œ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ์—ฌ๋Ÿ ๋ฒˆ์งธ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฌผ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

์•„ํ™‰ ๋ฒˆ์งธ ์ž‘์—…์˜ ๊ฒฝ์šฐ, (1, 1)์—์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ณด๋ฅผ ์‚ญ์ œํ•˜๋ฉด (2, 1)์—์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ณด๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

์—ด ๋ฒˆ์งธ ์ž‘์—…์˜ ๊ฒฝ์šฐ, (2, 2)์—์„œ ์œ„์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๊ธฐ๋‘ฅ์„ ์„ธ์šธ ๊ฒฝ์šฐ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ’œ๋‚˜์˜ ํ’€์ด

ํ•ด๋‹น ๋ฌธ์ œ๋Š” DP ํ’€์ด์˜ ๋ฌธ์ œ๋กœ ํšจ์œจ์ ์ธ ๊ฑฑ์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ, ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.

  1. (n+1) * (n+1) ํฌ๊ธฐ์˜ ํŒ
  2. ๊ฐ™์€ ์ขŒํ‘œ์— ๊ธฐ๋‘ฅ๊ณผ ๋ณด๊ฐ€ ์„ค์น˜๋  ์ˆ˜ ์žˆ์Œ
  3. ์‚ญ์ œ ํ›„์—๋„ ์ž”์—ฌ ๊ฑด์ถ•๋ฌผ๋“ค์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ
function solution(n, build_frame) {
    // ๊ธฐ๋‘ฅ์€ ๋ฐ”๋‹ฅ ์œ„์— ์žˆ๊ฑฐ๋‚˜ ๋ณด์˜ ํ•œ์ชฝ ๋ ๋ถ€๋ถ„ ์œ„์— ์žˆ๊ฑฐ๋‚˜, ๋˜๋Š” ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ ์œ„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    // ๋ณด๋Š” ํ•œ์ชฝ ๋ ๋ถ€๋ถ„์ด ๊ธฐ๋‘ฅ ์œ„์— ์žˆ๊ฑฐ๋‚˜, ๋˜๋Š” ์–‘์ชฝ ๋ ๋ถ€๋ถ„์ด ๋‹ค๋ฅธ ๋ณด์™€ ๋™์‹œ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    // [x, y, a, b] = [๊ฐ€๋กœ ์ขŒํ‘œ, ์„ธ๋กœ ์ขŒํ‘œ, type, isInstall]
    // type: 0(๊ธฐ๋‘ฅ), 1(๋ณด)
    // isInstall: 0(์‚ญ์ œ), 1(์„ค์น˜)

    // build_frame ์›์†Œ๋ฅผ ์ฐจ๋ก€๋กœ ๊ฒ€์‚ฌํ•˜๋ฉด์„œ
    // ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ , ์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ญ์ œํ•ด์ค€๋‹ค.

    const frames = [];
    build_frame.forEach((frame) => {
        const [x, y, type, isInstall] = frame;

        if (isInstall) {
        // ์„ค์น˜
            if (checkAdd(x, y, type, frames)) frames.push([x, y, type]);
        }
        // ์ œ๊ฑฐ
        else checkDelete(x, y, type, frames);
    })
    // x ์ขŒํ‘œ ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ ์ˆœ ์ •๋ ฌ, ๊ฐ™๋‹ค๋ฉด y์ขŒํ‘œ ์˜ค๋ฆ„์ฐจ ์ˆœ, ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด ๊ธฐ๋‘ฅ์ด ๋ณด๋ณด๋‹ค ์•ž์œผ๋กœ
    return frames.sort((a, b) => a[0] === b[0] ? a[1] === b[1] ? a[2] - b[2] : a[1] - b[1] : a[0] - b[0]);
}

function checkAdd(x, y, type, frames) {
    if (type) {
        // ๋ณด์ธ ๊ฒฝ์šฐ
        // 1. frames ์ค‘์— ๋ณด์ด๋ฉด์„œ ny = y ์ด๋ฉด์„œ nx๊ฐ€ x-1์ธ๊ฒŒ ์žˆ๊ณ , nx๊ฐ€ x+1์ธ๊ฑฐ ์žˆ์œผ๋ฉด ์ฐธ
        // 2. frames ์ค‘์— ๊ธฐ๋‘ฅ์ด๋ฉด์„œ nx === x ์ด๋ฉด์„œ ny === y-1์ธ๊ฒŒ ์žˆ์œผ๋ฉด ์ฐธ
        // 3. frames ์ค‘์— ๊ธฐ๋‘ฅ์ด๋ฉด์„œ nx = x + 1, ny = y + -1 ์ธ๊ฒŒ ์žˆ์œผ๋ฉด ์ฐธ
        if (frames.find(([nx, ny, ntype]) => !ntype && nx === x && ny === y - 1)) return true;
        if (frames.find(([nx, ny, ntype]) => !ntype && nx === x + 1 && ny === y - 1)) return true;
        if (frames.find(([nx, ny, ntype]) => ntype && ny === y && nx === x - 1) &&
            frames.find(([nx, ny, ntype]) => ntype && ny === y && nx === x + 1)) return true;        
        return false;
    } else {
        // ๊ธฐ๋‘ฅ์ธ ๊ฒฝ์šฐ
        // 1. y === 0 ์ด๋ฉด ๋ฌด์กฐ๊ฑด ์ฐธ
        // 2. ๊ธฐ๋‘ฅ์ด๋ฉด์„œ x๋Š” ๊ฐ™๊ณ , ny = y-1 ์ธ๊ฒŒ ์žˆ์œผ๋ฉด ์ฐธ
        // 3. ๋ณด์ด๋ฉด์„œ x, y ๊ฐ™์€๊ฒŒ ์žˆ์œผ๋ฉด ์ฐธ
        // 4. ๋ณด์ด๋ฉด์„œ nx = x - 1, ny = y์ธ๊ฒŒ ์žˆ์œผ๋ฉด ์ฐธ
        // some ํ•จ์ˆ˜๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
        if (y === 0) return true;
        if (frames.find(([nx, ny, ntype]) => !ntype && nx === x && ny === y - 1)) return true;
        if (frames.find(([nx, ny, ntype]) => ntype && nx === x && ny === y)) return true;
        if (frames.find(([nx, ny, ntype]) => ntype && nx === x - 1 && ny === y)) return true;
        return false;
    }
}

function checkDelete(x, y, type, frames) {
    // ํ”„๋ ˆ์ž„ ๋ฐฐ์—ด ๋ณต์‚ฌ
    const copy = frames.slice();
    
    // ์‚ญ์ œ๋  ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰
    // filter ํ•จ์ˆ˜๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
    const delIdx = copy.findIndex(([nx, ny, ntype]) => type === ntype && x === nx && y === ny);
    copy.splice(delIdx, 1);

    // ์ œ๊ฑฐ๋œ ์ƒํƒœ์—์„œ ํ”„๋ ˆ์ž„๋“ค์ด ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ
    for (let frame of copy) {
        const [nx, ny, ntype] = frame;
        if (!checkAdd(nx, ny, ntype, copy)) return;
    }

    frames.splice(delIdx, 1);
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€