문제설명
- 정수 n이 주어졌을 때 n이 3의 제곱 수이면 true를 반환하고 아니라면 false를 반환하라.
문제풀이
- 꼬리 재귀로 풀 수 있다.
- 3의 제곱수를 올려가며 함수를 호출한다.
- 3의 제곱수가 n과 같으면 true이고 더 크다면 false를 반환한다.
func isPowerOfThree(_ n: Int) -> Bool {
if n == 1 { return true }
return isPowerOfThreeHelper(n, 3)
}
func isPowerOfThreeHelper(_ n: Int, _ power: Int) -> Bool {
if n == power { return true }
if n < power { return false }
return isPowerOfThreeHelper(n, power * 3)
}
print(isPowerOfThree(1)) // true
print(isPowerOfThree(27)) // true
print(isPowerOfThree(0)) // false
print(isPowerOfThree(9)) // true
print(isPowerOfThree(45)) // false
print(isPowerOfThree(-45)) // false
print(isPowerOfThree(-27)) // false