
양수 n을 이진수로 나타냈을 때, 인접한 두 1 사이의 거리가 가장 길 때의 그 길이를 출력하는 프로그램을 만드세요.
n은 10의 9승 이하의 정수입니다.
우선 이진수로 바꿔야 하므로 toString이 필요합니다.
문자열/배열은 모두 각 글자를 순환이 가능한데, 배열은 split()을 사용하여 만들 수 있습니다. (혹은 배열 전개 연산자, new array 등을 사용합니다.)
보통은 split()을 사용하여 배열로 만드는 것이 간결하나, 이번 경우에는 문자열에 직접 접근하는 것이 불필요한 배열 변환을 피할 수 있습니다.
이번 코드의 경우의 수는 두 가지입니다.
1. 0이 나올 경우 -> 두 1 사이의 거리가 1만큼 더 증가합니다.
2. 1이 나올 경우 -> 두 1 사이의 거리가 return 됩니다.
function solution(n) {
if (0 < n && n <= 10 ** 9) {
let maxDistance = 1;
let distance = 1;
for (const digit of n.toString(2)) {
distance = digit === '0' ? distance + 1 : distance;
maxDistance = Math.max(maxDistance, distance);
}
return maxDistance;
}
}
우선 범위를 설정하고, 현재의 거리를 distance로 , 최대 거리를 maxDistance로 지정합니다.
n을 2진수의 문자열로 바꿉니다. 해당 문자열의 각 문자를 for of를 사용하여 순회합니다.
만약 각 문자(digit)가 '0'일 경우 현재 거리는 1 증가하며, '0'이 아닐 경우 (1일 경우)는 그대로 남습니다.
최대 거리인 maxDistance는 distance와 비교하여 최대 값인 경우를 갖습니다.