문제 이해하기
이번 글에서는 숫자 하나를 입력받아 허수 단위 i의 n제곱 값을 반환하는 JavaScript 함수를 작성해 보겠습니다.
여기서 허수 단위 i는 다음과 같이 정의됩니다.
i = √(-1)
허수의 거듭제곱은 아래와 같은 규칙적인 패턴을 따릅니다.
i¹ = i
i² = -1
i³ = -i
i⁴ = 1
핵심 아이디어: 4주기 패턴 활용
i의 거듭제곱은 4번마다 동일한 값으로 순환합니다. 즉, 지수가 아무리 커져도 4로 나눈 나머지만 확인하면 결과를 바로 알 수 있습니다.
- n % 4 === 0 → 결과는 1
- n % 4 === 1 → 결과는 i
- n % 4 === 2 → 결과는 -1
- n % 4 === 3 → 결과는 -i
코드 구현
다음은 위 원리를 switch문으로 구현한 코드입니다.
const num = 657;
const findNthPower = (num = 1) => {
switch (num % 4) {
case 0:
return '1';
case 1:
return 'i';
case 2:
return '-1';
case 3:
return '-i';
}
};
console.log(findNthPower(num));
실행 결과
i
동작 원리 살펴보기
입력값 657을 4로 나누면 몫은 164, 나머지는 1입니다. 따라서 num % 4의 값이 1이 되고, switch문의 case 1에 해당하여 문자열 'i'가 반환됩니다.
이처럼 나머지 연산자(%)를 활용하면 지수가 매우 큰 경우에도 상수 시간(O(1))에 결과를 계산할 수 있어 효율적입니다. 실제로 657제곱처럼 어마어마한 지수도 한 번의 나눗셈만으로 답을 구할 수 있습니다.