Given an integer n, return true if it is a power of three. Otherwise, return false.
An integer n is a power of three, if there exists an integer x such that n == 3x.
class Solution:
def isPowerOfThree(self, n: int) -> bool:
m = n
if n == 1:
return True
for a in range(2, n):
if pow(a, 2) > n:
return False
while m % a == 0:
m = m//a
if m == 1:
return True
m = n
return False
맨 첨에 문제를 제대로 안읽어서 그냥 a^n 의 형태면 모두 되는줄 알고 했다가 틀림
문제 좀 읽자...^^
class Solution:
def isPowerOfThree(self, n: int) -> bool:
m = n
if n == 1:
return True
while m % 3 == 0:
m = m//3
if m == 1:
return True
return False
3의 배수임을 알고 3의 배수면 무조건 true 리턴으로 짰는데 타임리밋 나옴;
싫어요가 좋아요의 두배 이상인 이유를 점점 알것같다...☆
class Solution:
def isPowerOfThree(self, n: int) -> bool:
m = n
if n < 1:
return False
if n == 1:
return True
while m % 3 == 0:
m = m//3
if m == 1:
return True
return False
음수에 대한 조건을 넣어줬더니 Accepted 됐다!!
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n==0:
return False
if n==1:
return True
if n%3==0:
return self.isPowerOfThree(n//3)
else:
return False
재귀 이용한 방식
Follow up: Could you do it without using any loop / recursion?
라고 하던데...반복문, 재귀 없이 대체 어떻게 한단말이죠..?
class Solution: def isPowerOfThree(self, n: int) -> bool: if not n or n<0: return False return (math.log10(n)/ math.log10(3)) % 1 == 0
찾아보니 수학적으로 접근한 방식도 있음
난 그냥 반복이랑 재귀와 살기로 결정했다.