개발 일지
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합니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
965. Univalued Binary Tree (단일값 이진 트리) (0) | 2024.10.31 |
---|---|
700. Search in a Binary Search Tree (이진 탐색 트리에서의 검색) (0) | 2024.10.29 |
1629. Slowest Key (가장 느린 키) (1) | 2024.10.21 |
1636. Sort Array by Increasing Frequency (빈도 증가에 따른 배열 정렬) (0) | 2024.10.21 |
1785. Minimum Elements to Add to Form a Given Sum (주어진 합을 형성하기 위해 더해야 할 최소 요소) (0) | 2024.10.18 |