Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

1566. Detect Pattern of Length M Repeated K or More Times (길이 M의 패턴이 K번 이상 반복되는 것을 감지합니다.) 본문

코딩 테스트/LeetCode

1566. Detect Pattern of Length M Repeated K or More Times (길이 M의 패턴이 K번 이상 반복되는 것을 감지합니다.)

포카리tea 2024. 10. 28. 17:37

양의 정수 배열 arr이 주어졌을 때, k번 이상 반복되는 길이 m의 패턴을 구합니다.

패턴은 하나 이상의 값으로 구성된 하위 배열(연속적인 하위 시퀀스)로, 겹치지 않고 여러 번 연속으로 반복됩니다. 패턴은 패턴의 길이와 반복 횟수로 정의됩니다.

길이 m의 패턴이 k번 이상 반복되는 경우 true로 반환하고, 그렇지 않으면 false로 반환합니다.

 

 

예시 1:

입력: arr = [1,2,4,4,4,4], m = 1, k = 3
출력: 참
설명: 길이 1의 패턴 (4)은 연속으로 4회 반복됩니다. 패턴은 k번 이상 반복될 수 있지만 그보다 적게 반복될 수는 없습니다.

 

예시 2:

입력: arr = [1,2,1,2,1,1,1,3], m = 2, k = 2
출력: true
설명: 길이가 2인 패턴 (1,2) 가 2번 연속으로 반복됩니다. 또 다른 유효한 패턴 (2,1) 도 2번 반복됩니다.

 

예시 3:

입력: arr = [1,2,1,2,1,3], m = 2, k = 3
출력: false
설명: 패턴 (1,2)는 길이가 2이지만 2번만 반복됩니다. 길이가 2인 패턴이 3번 이상 반복되는 경우는 없습니다.

 

 

조건:

  • 2 <= arr.length <= 100
  • 1 <= arr[i] <= 100
  • 1 <= m <= 100
  • 2 <= k <= 100

 

정답:

public class Solution {
    public bool ContainsPattern(int[] arr, int m, int k) {
        for (int i = 0; i < m; i++)
        {
            int checkCount = 1;
            
            for (int j = 1; j < (arr.Length - i) / m; j++)
            {
                if (arr.ToList().GetRange(i + (j - 1) * m, m).SequenceEqual(arr.ToList().GetRange(i + j * m, m)))
                {
                    checkCount++;
                    if (checkCount >= k)
                    {
                        return true;
                    }
                }
                else
                {
                    checkCount = 1;
                }
            }
        }

        return false;
    }
}

해설: arr[0] ~ arr[m - 1]를 시작으로 그 이전 리스트와 값이 동일한지 체크합니다.

첫 리스트뿐만 아니라 arr[1] ~ arr[m] 등 m사이의 값에서 또한 시작할 수 있으므로 m만큼 반복해줍니다

계속 반복하면서 반복한 개수를 checkCount에 체크하여 k와 동일하거나 같을 때 true를 아닐 때는 false를 return합니다.