본문 바로가기

알고리즘풀이

LeetCode: Is Power Of Three

문제설명

  • 정수 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