문제 이해하기
정수로 이루어진 배열을 입력받아, 배열 안에서 연속된 숫자(1씩 차이 나는 수)로 이루어진 인접 쌍의 개수를 반환하는 JavaScript 함수를 작성해야 합니다.
여기서 '연속된 숫자'란 두 수의 차이가 정확히 1인 경우를 의미합니다. 예를 들어 (1, 2), (-4, -3), (7, 6)처럼 서로 1만큼 차이 나는 쌍을 찾아 그 개수를 세면 됩니다.
예제 코드
const arr = [1, 2, 5, 8, -4, -3, 7, 6, 5];
const countPairs = (arr = []) => {
let count = 0;
for (let i = 0; i < arr.length; i += 2){
if (arr[i] - 1 === arr[i + 1] || arr[i] + 1 === arr[i + 1]){
count++;
}
}
return count;
};
console.log(countPairs(arr));
출력 결과
3
코드 동작 원리
위 코드의 작동 방식을 단계별로 살펴보겠습니다.
- 쌍 만들기: for 루프에서 인덱스를 2씩 증가시켜(
i += 2) 배열을 처음부터 두 요소씩 묶어 하나의 쌍으로 처리합니다. - 연속 여부 확인: 각 쌍에 대해 첫 번째 요소에서 1을 뺀 값 또는 1을 더한 값이 두 번째 요소와 같은지 검사합니다. 두 조건 중 하나라도 참이면 해당 쌍은 연속된 숫자입니다.
- 카운트 증가: 조건을 만족할 때마다
count변수를 1씩 증가시키고, 마지막에 최종 개수를 반환합니다.
예제 배열 분석
배열 [1, 2, 5, 8, -4, -3, 7, 6, 5]에서는 다음과 같은 쌍이 형성됩니다.
- (1, 2) → 연속됨 ✓
- (5, 8) → 연속되지 않음 ✗
- (-4, -3) → 연속됨 ✓
- (7, 6) → 연속됨 ✓
마지막 요소 5는 짝이 없으므로 제외되며, 따라서 최종 결과는 3이 됩니다. 시간 복잡도는 O(n)으로, 배열을 한 번만 순회하므로 매우 효율적입니다.