๏นฅ

Leetcode 2771. Longest Non-decreasing Subarray From Two Arrays (Python3)

@๋‚จ์ œ์ด ยท 2024๋…„ 07์›” 05์ผ ยท 5๋ถ„
problem_solvingleetcodepython

๋ฌธ์ œ ๋งํฌ

https://leetcode.com/problems/longest-non-decreasing-subarray-from-two-arrays/


๋ฌธ์ œ ์š”์•ฝ

๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด 0-indexed ์ •์ˆ˜๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง€๋Š” nums1 ๊ณผ nums2 ์˜ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€ nums3 ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

nums3 ๋ผ๋Š” ๋ฐฐ์—ด์˜ ์›์†Œ๋Š” nums1 ๋˜๋Š” nums2 ์˜ ์›์†Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ ธ์™€ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

nums1[i] or nums2[i] = nums3[i]


์ด ๋ฌธ์ œ์—์„œ ๊ตฌํ•ด์•ผํ•˜๋Š” ๊ฐ’์€ nums3 ๋ฐฐ์—ด ์•ˆ์—์„œ length of the longest non-decreasing subarray,
์‰ฝ๊ฒŒ ๋งํ•ด ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ๊ฐ์†Œํ•˜์ง€ ์•Š๊ณ  ๊ฐ™๊ฑฐ๋‚˜ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋œ ๊ฐ€์žฅ ๊ธด ์„œ๋ธŒ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.


longest non-decreasing subarray = ๊ฐ์†Œํ•˜์ง€ ์•Š๋Š” ๊ฐ€์žฅ ๊ธด ์„œ๋ธŒ ๋ฐฐ์—ด


๋‹ค์‹œ ๋งํ•ด์„œ nums3 ๋ฐฐ์—ด ์•ˆ์—์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋œ ๊ฐ€์žฅ ๊ธด ์„œ๋ธŒ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๋ง์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, nums3 ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ [5, 1, 2, 3, 4] ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๊ฐ€์žฅ ๊ธด subarray ๋Š” [1, 2, 3, 4] ๊ฐ€ ๋˜๋ฏ€๋กœ ๊ธธ์ด๋Š” 4๊ฐ€ ๋œ๋‹ค.

[ 5,   1,   2,   3,   4 ]
       |-- subarray --|

๋ฌธ์ œ ํ’€์ด

์†”์งํžˆ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ๋‚˜์„œ ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด์„œ ์ดํ•ดํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์˜ˆ์ œ์—์„œ nums1 = [2, 3, 1] , nums2 = [1, 2, 1] ์ด ์ฃผ์–ด์ง€๊ณ  nums3 ๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ•ด์„ํ•ด๋ดค๋‹ค.

| ๋ฐฐ์—ด | 0 | 1 | 2 |
|nums1| 2 | 3 | 1 |
|nums2| 1 | 2 | 1 |
-------------------
|nums3| 1 | 2 | 1 |

๋จผ์ € nums3[0] ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๋‘ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ ์งธ ์›์†Œ๋Š” nums1[0] = 2 , nums2[0] = 1 ์ด๋‹ค. ์˜ค๋ฆ„์ฐจ์ˆœ์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์œผ๋กœ ์˜ค๋Š” ์›์†Œ๋Š” ๋‘˜ ์ค‘ ์•„๋ฌด ๊ฐ’์ด๋‚˜ ์™€๋„ ๊ธธ์ด๋Š” ๊ฐ™์ง€๋งŒ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ํ• ๋‹น๋˜์–ด์•ผ ๋” ๊ธด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ, nums3[0] = nums2[0] = 1 ์ด ๋œ๋‹ค. ์ด ๋•Œ subarray ์˜ ๊ธธ์ด๋Š” ์ตœ์ดˆ 1 ์ด ๋œ๋‹ค.

๋‹ค์Œ์œผ๋กœ nums3[1] ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” nums3[0] ๋ณด๋‹ค ์ปค์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์„œ nums3[0] < nums3[1] ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.
nums1[1] = 3 ๊ณผ nums2[1] = 2 ์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‘˜ ๋‹ค nums3[0] ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
๊ทธ๋Ÿผ ์–ด๋–ค ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š”์ง€ ๋ดค์„ ๋•Œ ๋” ์ž‘์€ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ๋‹ค์Œ ๊ฐ’์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์˜ฌ ๊ฐ’์ด ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ž‘์€ ๊ฐ’์ธ nums2[1] ์˜ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.
๋”ฐ๋ผ์„œ, nums3[1] = nums2[1] = 2 ์ด ๋œ๋‹ค. ์ด ๋•Œ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— subarray ์˜ ๊ธธ์ด๋Š” 2 ๊ฐ€ ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ nums3[2] ๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

nums1[1] = 1 ๊ณผ nums2[1] = 1 ์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‘˜ ๋‹ค nums3[0] ๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
์ด ๋•Œ, ์œ ์˜ํ•ด์•ผํ•  ์ ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋” ์ด์ƒ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ subarray ์˜ ๊ธธ์ด๊ฐ€ 1์ด ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.

๋”ฐ๋ผ์„œ, nums3 ๋ฐฐ์—ด์˜ Subarray ๊ธธ์ด๋Š” ์ตœ๋Œ€ 2 ๊ฐ€ ๋œ๋‹ค. ( Subarray [1, 2] in nums3 [1, 2, 1] )
์ด๋Ÿฌํ•œ ๊ณผ์ •์œผ๋กœ Subarray ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค.


์กฐ๊ฑด : ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด Subarray ์˜ ๊ธธ์ด๊ฐ€ ์ดˆ๊ธฐํ™”๋œ๋‹ค.


์—ฌ๊ธฐ์„œ ์กฐ๊ฑด์„ ํ†ตํ•ด ํ•œ ๊ฐ€์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์€ ๊ธธ์ด๊ฐ€ ์ ์  ๋Š˜์–ด๋‚˜๋‹ค๊ฐ€ ๋‹ค์‹œ 1๋กœ ์ค„์–ด๋“ ๋‹ค๋Š” ์ ์ด๋‹ค.
์ด ์กฐ๊ฑด์„ ํ™•์ธํ•˜๊ณ ๋‚˜์„œ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ํ‘ธ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ด์„œ ํ’€์–ด์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.


๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์œ„์˜ ์กฐ๊ฑด๋“ค์— ๋งž๋Š” Subarray ๊ฐ€ ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋น„๊ตํ•ด๋ดค๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด nums1, nums2 ์˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

image


๋‘ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋Š” nums3 ์˜ Subarray ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ
nums1 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ์™€ nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ ธ๋ณด์•˜๋‹ค.


image2


์œ„์˜ ๊ทธ๋ฆผ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ

    • nums1[0] = 4 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 1 ์ด ๋œ๋‹ค.
    • nums2[0] = 8 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 1 ์ด ๋œ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ

    • nums1[1] = 16 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ num1[0] = 4 ๋ณด๋‹ค ํฌ๊ณ  nums2[0] = 8 ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์—
      nums1, nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ Subarray ๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.
      ๋”ฐ๋ผ์„œ, Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 2 ๊ฐ€ ๋œ๋‹ค.
    • nums2[1] = 4 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ num1[0] = 4 ๊ณผ ๊ฐ™๊ณ  nums2[0] = 8 ๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์—
      nums1 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ Subarray ๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.
      ๋”ฐ๋ผ์„œ, Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 2 ๊ฐ€ ๋œ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ

    • nums1[2] = 10 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ num1[1] = 16 ๋ณด๋‹ค ์ž‘์ง€๋งŒ nums2[1] = 4 ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์—
      nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ์—๋งŒ Subarray ๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.
      ๋”ฐ๋ผ์„œ, Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 3 ๊ฐ€ ๋œ๋‹ค.
    • nums2[2] = 1 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ num1[1] = 16 ๋ณด๋‹ค ์ž‘๊ณ  nums2[1] = 4 ๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์—
      Subarray ๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
      ๋”ฐ๋ผ์„œ, Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 1 ๊ฐ€ ๋œ๋‹ค.
  • ๋„ค ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ

    • nums1[3] = 8 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ num1[2] = 10 ๋ณด๋‹ค ์ž‘์ง€๋งŒ nums2[2] = 1 ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์—
      nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ์—๋งŒ Subarray ๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.
      ๋”ฐ๋ผ์„œ, Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 2 ๊ฐ€ ๋œ๋‹ค.
    • nums1[3] = 9 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํ•  ๋•Œ num1[2] = 10 ๋ณด๋‹ค ์ž‘์ง€๋งŒ nums2[2] = 1 ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์—
      nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ์—๋งŒ Subarray ๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.
      ๋”ฐ๋ผ์„œ, Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 2 ๊ฐ€ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‚˜์„œ ๊ฐ ์›์†Œ๋งˆ๋‹ค ๊ธธ์ด๊ฐ€ ํฐ ๊ฐ’์ด ๊ทธ ์›์†Œ ์œ„์น˜์—์„œ์˜ Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด Subarray ์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” nums3 ๋ฐฐ์—ด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

image3


์ด์ œ ์ด์™€ ๊ฐ™์€ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด dp ๋ฅผ ์ •์˜ํ•ด์ฃผ์—ˆ๋‹ค.
dp ์˜ ์ดˆ๊ธฐ๊ฐ’์„ 1 ๋กœ ์„ค์ •ํ•œ ์ด์œ ๋Š” Subarray ๋Š” ์ตœ์†Œ ํ•˜๋‚˜์˜ ์›์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์„ฑ๋ฆฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ๊ธธ์ด๋Š” 1 ์ด ๋˜์–ด ์ดˆ๊ธฐ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

dp = [[1] * 3 for _ in range(len(nums1))]
max_length = dp[0][2]

๊ฐ ์›์†Œ์˜ ๊ฐ’์˜ Subarray ์˜ ๊ธธ์ด ๊ฐ’์„ ๊ฐ€์ง€๋Š” 2๊ฐœ์˜ ์›์†Œ์™€ nums1 ๊ณผ nums2 ์˜ ๊ฐ’ ์ค‘์—์„œ ์–ด๋–ค ๊ฐ’์ด ๋” ๊ธธ์ด๊ฐ€ ๊ธด์ง€ ํ™•์ธ ํ›„์— ๋งˆ์ง€๋ง‰ ์›์†Œ์— ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.

max_length ์˜ ๊ฐ’์€ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ์—ˆ๋‹ค.

์ด์ œ ์œ„์—์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ๋Œ€๋กœ ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„๊ต ํ›„์— ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

for i in range(1, len(nums1)):
    # nums1 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ
    if nums1[i-1] <= nums1[i] and nums2[i-1] <= nums1[i]:
        dp[i][0] = dp[i-1][2] + 1
    elif nums1[i-1] <= nums1[i]:
        dp[i][0] = dp[i-1][0] + 1
    elif nums2[i-1] <= nums1[i]:
        dp[i][0] = dp[i-1][1] + 1
    else:
        dp[i][0] = 1
    # nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ
    if nums1[i-1] <= nums2[i] and nums2[i-1] <= nums2[i]:
        dp[i][1] = dp[i-1][2] + 1
    elif nums1[i-1] <= nums2[i]:
        dp[i][1] = dp[i-1][0] + 1
    elif nums2[i-1] <= nums2[i]:
        dp[i][1] = dp[i-1][1] + 1
    else:
        dp[i][1] = 1

    # nums1 ๊ณผ nums2 ์˜ ๊ธธ์ด ์ค‘ ๋” ํฐ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
    dp[i][2] = max(dp[i][0], dp[i][1])

    # nums3 ์˜ Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค.
    max_length = max(dp[i][2], max_length)

์ œ์ถœ ๋‹ต์•ˆ

"""
์‹คํ–‰ ์‹œ๊ฐ„: 882 ms
๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ: 41.74 MB
์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
"""

class Solution:
    def maxNonDecreasingLength(self, nums1: List[int], nums2: List[int]) -> int:
        dp = [[1] * 3 for _ in range(len(nums1))]
        max_length = dp[0][2]

        # nums1 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ
        for i in range(1, len(nums1)):
            if nums1[i-1] <= nums1[i] and nums2[i-1] <= nums1[i]:
                dp[i][0] = dp[i-1][2] + 1
            elif nums1[i-1] <= nums1[i]:
                dp[i][0] = dp[i-1][0] + 1
            elif nums2[i-1] <= nums1[i]:
                dp[i][0] = dp[i-1][1] + 1
            else:
                dp[i][0] = 1

            # nums2 ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ
            if nums1[i-1] <= nums2[i] and nums2[i-1] <= nums2[i]:
                dp[i][1] = dp[i-1][2] + 1
            elif nums1[i-1] <= nums2[i]:
                dp[i][1] = dp[i-1][0] + 1
            elif nums2[i-1] <= nums2[i]:
                dp[i][1] = dp[i-1][1] + 1
            else:
                dp[i][1] = 1

            # nums1 ๊ณผ nums2 ์˜ ๊ธธ์ด ์ค‘ ๋” ํฐ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
            dp[i][2] = max(dp[i][0], dp[i][1])

            # nums3 ์˜ Subarray ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค.
            max_length = max(dp[i][2], max_length)

        return max_length