숫자 n이 있다고 가정하고 이진 표현에서 가장 긴 연속 1의 길이를 찾아야 합니다.
따라서 입력이 n =312와 같으면 출력은 3이 됩니다. 312는 이진수로 100111000이고 3개의 연속적인 1이 있기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
ret :=0, len :=0
-
initialize i :=0의 경우, i <32일 때 업데이트(i를 1만큼 증가), 수행:
-
n/2가 홀수이면
-
(len 1씩 증가)
-
-
그렇지 않으면
-
len :=0
-
-
ret :=ret 및 len의 최대값
-
-
리턴 렛
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
소스 코드(C++) -
예시
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(int n) { int ret = 0; int len = 0; for(int i = 0; i < 32; i++){ if((n >> i) & 1){ len++; }else{ len = 0; } ret = max(ret, len); } return ret; } }; main(){ Solution ob; cout << ob.solve(312); }
입력
312
출력
3