이진수에서 K개 이상의 연속된 1이 존재하는지 확인하려면 배열을 순회하면서 0과 1을 구분해 처리해야 합니다.
핵심 로직
먼저 0(false)과 1(true)을 표현하는 bool 배열을 준비합니다.
bool[] myArr = {false, true, false, false, false, true, true, true};배열 요소가 0(false)이라면 연속 카운트를 초기화합니다.
if (myArr[i] == false)
count = 0;요소가 1(true)이라면 카운트를 증가시키고, 지금까지의 최대 연속 길이와 비교하여 더 큰 값을 결과로 저장합니다. 두 수 중 큰 값을 반환하는 Math.Max() 메서드를 활용합니다.
count++; res = Math.Max(res, count);
전체 예제 코드
다음은 이진수에서 연속된 1의 최대 개수를 구하는 완전한 C# 프로그램입니다.
using System;
class MyApplication {
static int count(bool[] myArr, int num) {
int myCount = 0, res = 0;
for (int i = 0; i < num; i++) {
if (myArr[i] == false)
myCount = 0;
else {
myCount++;
res = Math.Max(res, myCount);
}
}
return res;
}
public static void Main() {
bool[] myArr = {false, true, false, false, false, true, true, true};
int num = myArr.Length;
Console.Write("Consecutive 1's = " + count(myArr, num));
}
}실행 결과
Consecutive 1's = 3
코드 설명
위 프로그램은 시간 복잡도 O(n)으로 배열을 한 번만 순회합니다. myCount 변수는 현재 위치까지의 연속된 1의 길이를 추적하고, 0을 만나면 다시 0으로 초기화됩니다. res 변수는 순회 과정에서 발견된 가장 긴 연속 1의 길이를 항상 유지하며, 최종적으로 이 값이 반환됩니다.
예제 배열 {false, true, false, false, false, true, true, true}에서 마지막 세 개의 요소가 모두 true이므로, 실행 결과로 3이 출력됩니다. 만약 특정 값 K 이상인지 판별하고 싶다면 반환된 값과 K를 비교하는 조건문만 추가하면 됩니다.