갭풀 숫자란 무엇일까?
갭풀(Gapful) 숫자는 다음 두 가지 조건을 모두 충족하는 수를 말합니다.
- 최소 세 자리 이상의 숫자여야 한다.
- 첫 번째 자릿수와 마지막 자릿수를 이어 붙여 만든 수로 정확히 나누어 떨어져야 한다.
예시
1053은 네 자리 숫자이고, 첫 자리와 끝 자리를 이어 붙인 13으로 정확히 나누어 떨어지므로 갭풀 숫자입니다.
135는 세 자리 숫자이고, 15로 정확히 나누어 떨어지므로 갭풀 숫자입니다.
이번 글의 목표는 입력으로 주어진 숫자와 가장 가까운 갭풀 숫자를 찾아 반환하는 프로그램을 작성하는 것입니다. 그럼 바로 코드를 살펴보겠습니다.
구현 코드
const n = 134;
// 숫자 문자열을 받아 불리언 값을 반환하는 함수
const isGapful = (numStr) => {
const int = parseInt(numStr);
return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0;
};
// 메인 함수 -- 숫자를 받아 가장 가까운 갭풀 숫자를 반환
const nearestGapful = (num) => {
if(typeof num !== 'number'){
return -1;
}
if(num <= 100){
return 100;
}
let prev = num - 1, next = num + 1;
while(!isGapful(String(prev)) && !isGapful(String(next))){
prev--;
next++;
};
return isGapful(String(prev)) ? prev : next;
};
console.log(nearestGapful(n));
코드 동작 원리
isGapful 함수: 숫자를 문자열로 받아 첫 자릿수와 마지막 자릿수를 이어 붙인 값을 구한 뒤, 해당 값으로 나눈 나머지가 0인지 검사합니다. 조건을 만족하면 true, 아니면 false를 반환합니다.
nearestGapful 함수: 먼저 입력값이 숫자 타입인지 확인하고, 그렇지 않으면 -1을 반환합니다. 세 자리 미만에는 갭풀 숫자가 존재하지 않으므로(가장 작은 갭풀 숫자는 100), 100 이하의 입력에 대해서는 100을 바로 반환합니다. 그 외의 경우에는 입력값을 기준으로 한 칸씩 아래(prev)와 위(next) 방향으로 범위를 넓혀가며 갭풀 숫자를 탐색하고, 가장 먼저 발견된 값을 결과로 돌려줍니다.
실행 결과
입력값이 134일 때, 133은 13으로 나누어 떨어지지 않지만 135는 15로 나누어 떨어지므로 콘솔에는 다음과 같은 결과가 출력됩니다.
135