[Codility] Lesson 1) Iterations : BinaryGap
문제
파라미터로 주어진 정수 N을 이진수로 했을 때, 1 사이의 연속된 0 의 최대 길이를 반환하는 문제이다.
예를 들어 N=9 인 경우, 이진수로 변환하면 1001 이고 1 사이의 연속된 0 의 길이는 2 이다. 그러나 N=8인 경우, 1000에서는 1사이에 있는 0은 없기 때문에 0을 반환해야 한다.
내가 푼 코드
function solution(N) {
// 파라미터 바이너리로 바꾸기
const bin = N.toString(2);
// 연속된 0의 최대 길이
let result = 0;
// 연속된 0의 길이를 임시로 저장할 변수
let gap;
// 이진수 처음부터 for 문 돌리기
for (n of bin){
// 1을 만나면 gap을 0으로 초기화하는데 그 전에 gap이 result보다 크면 그 값으로 갱신후 gap reset
if (n==1){
if(gap > result){
result = gap;
}
gap = 0;
}
// 0이면 gap을 증가시킴
else if (n==0){
gap++;
}
// 앞으로 확인할 이진수의 남은 길이보다 result가 더 크다면 더 확인할 필요가 없으므로 for 문 종료
if (bin.length - bin.indexOf(n) < result){
break;
}
}
return result;
}
재귀로 풀어도 될 것 같다..?
'프로그래밍 언어 > Javascript' 카테고리의 다른 글
[Javascript/Codility] Lesson3) Time Complexity : FrogJump (0) | 2021.04.20 |
---|---|
[Javascript/Codility] Lesson2) Array : CyclicRotation (0) | 2021.04.20 |
VScode에서 snippet 사용하기 (0) | 2021.03.03 |
[프로그래머스 코딩테스트 연습] 스택/큐 4. 기능개발 (Javascript 자바스크립트) (0) | 2021.03.02 |
vanila javascript 환경에서 redux 사용하기 (0) | 2021.02.18 |