[leetcode-python3] 326. Power of Three

shsh·2020년 12월 6일
0

leetcode

목록 보기
23/161

326. Power of Three - python3

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.

My Answer 1: Wrong Answer

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 의 형태면 모두 되는줄 알고 했다가 틀림

문제 좀 읽자...^^

My Answer 2: Time Limit Exceeded

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 리턴으로 짰는데 타임리밋 나옴;

싫어요가 좋아요의 두배 이상인 이유를 점점 알것같다...☆

My Answer 3: Accepted (Runtime: 68 ms / Memory Usage: 14.1 MB)

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 됐다!!

Other Answer 1:

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

재귀 이용한 방식

Other Answer 2:

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

찾아보니 수학적으로 접근한 방식도 있음

난 그냥 반복이랑 재귀와 살기로 결정했다.

profile
Hello, World!

0개의 댓글

관련 채용 정보