๐Ÿ—[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ

Chobbyยท2022๋…„ 3์›” 26์ผ
1
post-thumbnail

๋ฌธ์ œ ์„ค๋ช…

[๋ณธ ๋ฌธ์ œ๋Š” ์ •ํ™•์„ฑ๊ณผ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ๊ฐ๊ฐ ์ ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.]

N x M ํฌ๊ธฐ์˜ ํ–‰๋ ฌ ๋ชจ์–‘์˜ ๊ฒŒ์ž„ ๋งต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งต์—๋Š” ๋‚ด๊ตฌ๋„๋ฅผ ๊ฐ€์ง„ ๊ฑด๋ฌผ์ด ๊ฐ ์นธ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์€ ์ด ๊ฑด๋ฌผ๋“ค์„ ๊ณต๊ฒฉํ•˜์—ฌ ํŒŒ๊ดดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฌผ์€ ์ ์˜ ๊ณต๊ฒฉ์„ ๋ฐ›์œผ๋ฉด ๋‚ด๊ตฌ๋„๊ฐ€ ๊ฐ์†Œํ•˜๊ณ  ๋‚ด๊ตฌ๋„๊ฐ€ 0์ดํ•˜๊ฐ€ ๋˜๋ฉด ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์•„๊ตฐ์€ ํšŒ๋ณต ์Šคํ‚ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑด๋ฌผ๋“ค์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ ์˜ ๊ณต๊ฒฉ๊ณผ ์•„๊ตฐ์˜ ํšŒ๋ณต ์Šคํ‚ฌ์€ ํ•ญ์ƒ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์‚ฌ์ง„์€ ํฌ๊ธฐ๊ฐ€ 4 x 5์ธ ๋งต์— ๋‚ด๊ตฌ๋„๊ฐ€ 5์ธ ๊ฑด๋ฌผ๋“ค์ด ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (0,0)๋ถ€ํ„ฐ (3,4)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 4๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (2,0)๋ถ€ํ„ฐ (2,3)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 2๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 4๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ๋กœ ์•„๊ตฐ์ด ๋งต์˜ (1,0)๋ถ€ํ„ฐ (3,1)๊นŒ์ง€ ํšŒ๋ณตํ•˜์—ฌ 2๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜์—ˆ๋‹ค๊ฐ€ ๋ณต๊ตฌ๋˜๊ณ  2๊ฐœ์˜ ๊ฑด๋ฌผ๋งŒ ํŒŒ๊ดด๋˜์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์ด ๋งต์˜ (0,1)๋ถ€ํ„ฐ (3,3)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 1๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 8๊ฐœ์˜ ๊ฑด๋ฌผ์ด ๋” ํŒŒ๊ดด๋˜์–ด ์ด 10๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. (๋‚ด๊ตฌ๋„๊ฐ€ 0 ์ดํ•˜๊ฐ€ ๋œ ์ด๋ฏธ ํŒŒ๊ดด๋œ ๊ฑด๋ฌผ๋„, ๊ณต๊ฒฉ์„ ๋ฐ›์œผ๋ฉด ๊ณ„์†ํ•ด์„œ ๋‚ด๊ตฌ๋„๊ฐ€ ํ•˜๋ฝํ•˜๋Š” ๊ฒƒ์— ์œ ์˜ํ•ด์ฃผ์„ธ์š”.)

์ตœ์ข…์ ์œผ๋กœ ์ด 10๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค board์˜ ํ–‰์˜ ๊ธธ์ด (= N) โ‰ค 1,000
  • 1 โ‰ค board์˜ ์—ด์˜ ๊ธธ์ด (= M) โ‰ค 1,000
  • 1 โ‰ค board์˜ ์›์†Œ (๊ฐ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„) โ‰ค 1,000
  • 1 โ‰ค skill์˜ ํ–‰์˜ ๊ธธ์ด โ‰ค 250,000
  • skill์˜ ์—ด์˜ ๊ธธ์ด = 6
  • skill์˜ ๊ฐ ํ–‰์€ [type, r1, c1, r2, c2, degree]ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • type์€ 1 ํ˜น์€ 2์ž…๋‹ˆ๋‹ค.
      • type์ด 1์ผ ๊ฒฝ์šฐ๋Š” ์ ์˜ ๊ณต๊ฒฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
      • type์ด 2์ผ ๊ฒฝ์šฐ๋Š” ์•„๊ตฐ์˜ ํšŒ๋ณต ์Šคํ‚ฌ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
    • (r1, c1)๋ถ€ํ„ฐ (r2, c2)๊นŒ์ง€ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ๋ฒ”์œ„ ์•ˆ์— ์žˆ๋Š” ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ degree ๋งŒํผ ๋‚ฎ์ถ”๊ฑฐ๋‚˜ ๋†’์ธ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
      • 0 โ‰ค r1 โ‰ค r2 < board์˜ ํ–‰์˜ ๊ธธ์ด
      • 0 โ‰ค c1 โ‰ค c2 < board์˜ ์—ด์˜ ๊ธธ์ด
      • 1 โ‰ค degree โ‰ค 500
      • type์ด 1์ด๋ฉด degree๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
      • type์ด 2์ด๋ฉด degree๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  • ๊ฑด๋ฌผ์€ ํŒŒ๊ดด๋˜์—ˆ๋‹ค๊ฐ€ ํšŒ๋ณต ์Šคํ‚ฌ์„ ๋ฐ›์•„ ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด ๋˜๋ฉด ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ตœ์ข…์ ์œผ๋กœ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ด๋ฉด ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ์ž…๋‹ˆ๋‹ค.

์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ œํ•œ ์‚ฌํ•ญ

  • 1 โ‰ค board์˜ ํ–‰์˜ ๊ธธ์ด (= N) โ‰ค 100
  • 1 โ‰ค board์˜ ์—ด์˜ ๊ธธ์ด (= M) โ‰ค 100
  • 1 โ‰ค board์˜ ์›์†Œ (๊ฐ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„) โ‰ค 100
  • 1 โ‰ค skill์˜ ํ–‰์˜ ๊ธธ์ด โ‰ค 100
    • 1 โ‰ค degree โ‰ค 100

ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ œํ•œ ์‚ฌํ•ญ

  • ์ฃผ์–ด์ง„ ์กฐ๊ฑด ์™ธ ์ถ”๊ฐ€ ์ œํ•œ์‚ฌํ•ญ ์—†์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

boardskillresult
[[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]][[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]]10
[[1,2,3],[4,5,6],[7,8,9]][[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]]6

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

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

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

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

<์ดˆ๊ธฐ ๋งต ์ƒํƒœ>

์ฒซ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (1,1)๋ถ€ํ„ฐ (2,2)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 4๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ์ ์ด ๋งต์˜ (0,0)๋ถ€ํ„ฐ (1,1)๊นŒ์ง€ ๊ณต๊ฒฉํ•˜์—ฌ 2๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์•„๊ตฐ์ด ๋งต์˜ (2,0)๋ถ€ํ„ฐ (2,0)๊นŒ์ง€ ํšŒ๋ณตํ•˜์—ฌ 100๋งŒํผ ๊ฑด๋ฌผ์˜ ๋‚ด๊ตฌ๋„๋ฅผ ๋†’์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฉ๋‹ˆ๋‹ค.

์ด, 6๊ฐœ์˜ ๊ฑด๋ฌผ์ด ํŒŒ๊ดด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 6์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ œํ•œ์‹œ๊ฐ„ ์•ˆ๋‚ด

  • ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ : 10์ดˆ
  • ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ : ์–ธ์–ด๋ณ„๋กœ ์ž‘์„ฑ๋œ ์ •๋‹ต ์ฝ”๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์˜ ์ ์ • ๋ฐฐ์ˆ˜

๋‚˜์˜ ํ’€์ด

ํ•ด๋‹น ๋ฌธ์ œ๋Š” Brute Force์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

์นด์นด์˜ค ํ•ด์„ค ํŽ˜์ด์ง€ ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ imos ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ ๋ˆ„์ ํ•ฉ ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด

// ํ•ด๋‹น ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ ๋ถ€ํ„ฐ 2๋ฒˆ์งธ ์ธ๋ฑ์Šค์— +5๋ฅผ ํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ
const want = [1,2,3,4]

// ๋ณ€ํ™”๋ฅผ ์ฃผ์–ด์•ผ ํ•  ์ˆ˜๋Š” [2,3] ์œผ๋กœ ๊ธธ์ด๊ฐ€ 2 ์ง€๋งŒ ํ•˜๋‚˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณ€ํ™”๋ฅผ ์ค„ ์ˆ˜๋ฅผ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ๋†“์ด๊ฒŒ ํ•˜๊ณ  ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ์ˆ˜๋Š” 0์„ ๋ฐฐ์น˜ํ•œ ๋’ค์— ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— -1์„ ๊ณฑํ•ด์ค€ ์ˆ˜๋ฅผ ์œ„์น˜์‹œํ‚จ๋‹ค.
const imos = [0,5,0,-5]

// ํ•ด๋‹น ๋ฐฐ์—ด์— ๋‘๋ฒˆ์งธ ์ธ๋ฑ์Šค ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๊นŒ์ง€ ๋ชจ๋‘ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.
[5,5,0]

// ์›ํ–ˆ๋˜ ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ ๋นˆ ๊ณต๊ฐ„์„ 0์œผ๋กœ ์ฑ„์›Œ์„œ ๊ธฐ์กด ๋ฐฐ์—ด๊ณผ ๋”ํ•ด์คŒ
imos = [0,5,5,0]
want.map((el,idx) => el+imos[idx])

return want // [1,7,8,4]
function solution(board, skill) {
    const base = Array.from({length:board.length+1},(_,i) => Array(board[0].length+1).fill(0))
    skill.forEach(s => {
        // ๋ฐ๋ฏธ์ง€ ๋˜๋Š” ํšŒ๋ณต
        const dmg = !(s[0]-1) ? -1 : 1
        // ์‹œ์ž‘ ์ขŒํ‘œ
        const [startY,startX] = s.slice(1,3)
        // ์ข…๋ฃŒ ์ขŒํ‘œ
        const [endY,endX] = s.slice(3,5)
        // ๊ฐ’
        const val = s[5]
        // ํ˜„์žฌ์œ„์น˜
        base[startY][startX] += val * dmg
        // x์ถ• ๋์œ„์น˜+1
        base[startY][endX+1] += -val * dmg
        // y์ถ• ๋์œ„์น˜+1
        base[endY+1][startX] += -val * dmg
        // x์ถ• ๋์œ„์น˜+1, y์ถ• ๋์œ„์น˜+1
        base[endY+1][endX+1] += val * dmg
    })
    
    // ์œ„์ชฝ์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ +=
    for(let row = 0 ; row < base.length - 1 ; row ++) {
        for(let col = 0 ; col < base[row].length ; col++) {
            base[row+1][col] += base[row][col] 
        }
    }
    
    // ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ +=
    for(let row = 0 ; row < base.length ; row ++) {
        for(let col = 0 ; col < base[row].length -1 ; col++) {
             base[row][col+1] += base[row][col] 
        }
    }
    
    // ๊ธฐ์กด ๋ฐฐ์—ด๊ณผ ํ•ฉ์นจ
    for(let row = 0 ; row < board.length ; row ++) {
        for(let col = 0 ; col < board[row].length ; col++) {
             board[row][col]+=base[row][col]
        }
    }
    return board.flat(Infinity).filter(item => item > 0).length
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

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