Miyeon

#48 Maximum Length of Repeated Subarray (1)

2021-07-09Algorithm

๐Ÿ”ฅ Maximum Length of Repeated Subarray๐Ÿ”ฅ

Example 1:

Input: nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
Output: 3
Explanation: The repeated subarray with maximum length is [3,2,1].

Example 2:

Input: (nums1 = [0, 0, 0, 0, 0]), (nums2 = [0, 0, 0, 0, 0]);
Output: 5;

์ ‘๊ทผ ์ˆœ์„œ

  1. ๋ฐฐ์—ด nums1์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด nums2์— ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ
  2. ๋ฐฐ์—ด์˜ ์š”์†Œ๋งŒํผ ์ฐพ๋Š” ํšŸ์ˆ˜ ๋ฐ˜๋ณต
  3. ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ธฐ
  4. ๊ฐ™์€ ์ˆ˜๋Š” ๋ฐฐ์—ด nums2์—์„œ ์‚ญ์ œํ•˜๊ธฐ
  5. ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์˜ ๊ธธ์ด ๋ฆฌํ„ดํ•˜๊ธฐ

์ฝ”๋“œ ์ž‘์„ฑ

let findLength = function(nums1, nums2) {
  let repeatedSubArray = [];

  for (let i = 0; i < nums1.length; i++) {
    let repeatedNumber = nums2.find(num => num === nums1[i]);

    if (repeatedNumber) {
      repeatedSubArray.push(repeatedNumber);
      let repeatedNumberIndex = nums2.indexOf(repeatedNumber);
      nums2.splice(repeatedNumberIndex, 1);
    }
  }
  return repeatedSubArray.length;
};

ํ…Œ์ŠคํŠธ ์‹คํŒจ ๋“ฑ์žฅ

Input: (nums1 = [0, 0, 0, 0, 1]), (nums2 = [1, 0, 0, 0, 0]);
Output: 5;
Expected: 4;

ํฌ๋‚˜ํฐ ๋ฌธ์ œ ๋ฐœ๊ฒฌ!

  • ์™„์ „ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ์—ˆ๋‹ค. ์—ฐ์†๋œ ๋ฐฐ์—ด์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์˜€๋Š”๋ฐ ๋‚˜๋Š” ๊ฐ™์€ ์ˆซ์ž๋ฅผ ์ฐพ๋Š”๋‹ค๊ณ  ์ฐฉ๊ฐํ–ˆ๋‹ค! ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋•๋ถ„์— ๋‚ด๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ํŒŒ์•…ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์ƒˆ๋กญ๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์€ 1. ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ ๊ฐ™์€๊ฒŒ ์กด์žฌํ•˜๋Š”์ง€ ์ฐพ๊ธฐ 2. ์—ฐ์†๋˜๋Š”์ง€ ๋ฐ˜๋ณต์„ ํ†ตํ•ด์„œ ๋ฐœ๊ฒฌํ•˜๊ธฐ. ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์—ฐ์†๋˜๋Š”์ง€, ๋ช‡๊ฐœ๊ฐ€ ์—ฐ์†๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•˜๋‹ˆ ๊ฐ‘์ž๊ธฐ ๋จธ๋ฆฌ๊ฐ€ ๋ฉํ•ด์กŒ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜. ์•„์ง ์ด ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ํžŒํŠธ์—๋Š” Use dynamic programming. dp[i][j] will be the answer for inputs A[i:], B[j:].๋ผ๊ณ  ๋‚˜์™”๋Š”๋ฐ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋„๋Œ€์ฒด ๋ญ˜๊นŒ
  • ์ด๋Ÿฐ ์œ ํ˜•์˜ ๋ฌธ์ œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ’€๋ฉด ๋˜๋Š”๊ตฌ๋‚˜ ํ•ด์„œ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ญ”์ง€ ๊ฒ€์ƒ‰ํ•ด๋ณด์•˜๋‹ค.

์‹œ๊ฐํ™”

Input: nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
Output: 3
Explanation: The repeated subarray with maximum length is [3,2,1].
[]12321
[]000000
3000100
2001020
1010003
4000000
7000000


WILT : What I Learned Today ๐Ÿค”

  • ์กฐ๊ฑด๋ฌธ์„ true๋กœ๋งŒ ์ฃผ๋‹ˆ๊นŒ falsy๊ฐ’์ธ 0์ด ์กฐ๊ฑด์—์„œ ์ œ์™ธ๋˜์—ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค boolean ๊ฐ’์„ ๊ฐ€์ง€๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๋‹ค
  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์•„์ง ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋‚ด์ผ ๋‹ค์‹œ ๊ฐœ๋… ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋’ค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ด์•ผ๊ฒ ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‚œ์ด๋„ medium์€ ์–ด๋งˆ์–ด๋งˆ ํ•˜๊ตฌ๋‚˜!!

์ฐธ๊ณ 

Maximum Length of Repeated Subarray | leetcode 718 | Live coding session

Dynamic Programming - Learn to Solve Algorithmic Problems & Coding Challenges