πŸ’†πŸ»‍♂️ ν”Ό-μ—μŠ€/🐣 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[μŠ€μœ„ν”„νŠΈ μ•Œκ³ λ¦¬μ¦˜] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€: κ°€μž₯ 큰 μ •μ‚¬κ°ν˜• μ°ΎκΈ°

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 9. 2. 00:21

문제

https://programmers.co.kr/learn/courses/30/lessons/12905

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - κ°€μž₯ 큰 μ •μ‚¬κ°ν˜• μ°ΎκΈ°

[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9

programmers.co.kr

1와 0둜 μ±„μ›Œμ§„ ν‘œ(board)κ°€ μžˆμŠ΅λ‹ˆλ‹€. ν‘œ 1칸은 1 x 1 의 μ •μ‚¬κ°ν˜•μœΌλ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€. ν‘œμ—μ„œ 1둜 이루어진 κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•μ„ μ°Ύμ•„ 넓이λ₯Ό return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. (단, μ •μ‚¬κ°ν˜•μ΄λž€ 좕에 ν‰ν–‰ν•œ μ •μ‚¬κ°ν˜•μ„ λ§ν•©λ‹ˆλ‹€.)

예λ₯Ό λ“€μ–΄

0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

κ°€ μžˆλ‹€λ©΄ κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•μ€

0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

κ°€ 되며 λ„“μ΄λŠ” 9κ°€ λ˜λ―€λ‘œ 9λ₯Ό λ°˜ν™˜ν•΄ μ£Όλ©΄ λ©λ‹ˆλ‹€.

풀이

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ ν•΄κ²°ν•©λ‹ˆλ‹€. 

 

dp 배열은 μ΄ˆκΈ°μ—λŠ” 주어진 λ°°μ—΄κ³Ό μΌμΉ˜ν•˜κ³  dp λ°°μ—΄μ—λŠ” ν•΄λ‹Ή μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ λ§Œλ“€ 수 μžˆλŠ” μ •μ‚¬κ°ν˜•μ˜ μ΅œλŒ€ 개수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ •μ‚¬κ°ν˜•μ˜ 개수λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œ λ‹€μŒκ³Ό 같은 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 개수λ₯Ό νŒλ³„ν•©λ‹ˆλ‹€.

  1. board 배열을 μˆœνšŒν•˜λ©΄μ„œ 각 μœ„μΉ˜λ₯Ό νƒμƒ‰ν•©λ‹ˆλ‹€.
    1. ν˜„μž¬ μœ„μΉ˜μ˜ 값이 0이라면 아무것도 ν•˜μ§€ μ•Šκ³  κ±΄λ„ˆλœλ‹ˆλ‹€.
    2. ν˜„μž¬ μœ„μΉ˜μ˜ 값이 1이라면 μ΅œμ†Œ ν•œ 개의 μ •μ‚¬κ°ν˜•μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. ν˜„μž¬ μœ„μΉ˜μ˜ 값이 1일 λ•Œ, λ§Œλ“€ 수 μžˆλŠ” μ΅œλŒ€ μ •μ‚¬κ°ν˜•μ„ ν™•μΈν•˜κΈ° μœ„ν•΄μ„œ dp λ°°μ—΄μ—μ„œ μžμ‹ μ˜ 쒌츑, 우츑, 쒌츑 λŒ€κ°μ„  λ°©ν–₯의 값을 ν™•μΈν•©λ‹ˆλ‹€. board 배열을 각 행을 μ΄λ™ν•˜λ©΄μ„œ μˆœνšŒν•˜κΈ° λ•Œλ¬Έμ— dp λ°°μ—΄μ˜ 쒌츑, 우츑, 쒌츑 λŒ€κ°μ„ μ—λŠ” ν•΄λ‹Ή μœ„μΉ˜λ‘œλΆ€ν„° λ§Œλ“€ 수 μžˆλŠ” μ΅œλŒ€ μ •μ‚¬κ°ν˜•μ˜ κ°œμˆ˜κ°€ μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  3. λ”°λΌμ„œ ν˜„μž¬ μœ„μΉ˜μ—μ„œ 얻을 수 μžˆλŠ” μ •μ‚¬κ°ν˜•μ˜ μ΅œλŒ€ κ°œμˆ˜λŠ”  쒌츑, 우츑, 쒌츑 λŒ€κ°μ„  에 μ €μž₯된 μ •μ‚¬κ°ν˜•μ˜ 개수 쀑 μ΅œμ†Œκ°’μ— 1을 λ”ν•œ κ°œμˆ˜μž…λ‹ˆλ‹€. 쒌츑, 우츑, 쒌츑 λŒ€κ°μ„  λ°©ν–₯이 λͺ¨λ‘ 1둜 μ±„μ›Œμ Έ μžˆμ–΄μ•Ό μ •μ‚¬κ°ν˜•μ„ λ§Œλ“€ 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ½”λ“œ