알고리즘/Python

[python] 프로그래머스 - 124 나라의 숫자

제주도랏맨 2022. 2. 21. 23:58

 

출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/12899

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

더보기

 

첫 번째 풀이 : 효율성 테스트3 실패

 

def solution(n):
    answer = []
    
    n = int(n)
    
    while n >= 3:
        rest = n % 3
        
        if rest != 0:
            answer.append(str(rest))
            n //= 3
        else:
            answer.append('4')
            n = n // 3 - 1
    
    answer.append(str(n))
            
    return str(int(''.join(reversed(answer))))

 

처음보자마자 한 생각은 n진법과 비슷한 규칙성이 있지 않을까? 라는 생각을 접근했다.

그리고

 

3진법과 유사하게 동작하되 3으로 나눈 나머지가 0이면 나머지로 4를 넣고 몫을 1 줄인채로 진행한다는 규칙

 

을 찾아내었다.

아마 효율성 테스트는 str, int 하는 과정에서 걸린 것 같아서 저 부분만 수정하면 통과할 듯

 

 

두 번째 풀이

 

def solution(n):
    answer = []
    
    #3진법을 기반으로
    #나머지가 1이면 1
    #나머지가 2이면 2
    #나머지가 0이면 몫 - 1 나머지 4
    
    n = int(n)
    
    while n >= 3:
        rest = n % 3
        
        if rest != 0:
            answer.append(str(rest))
            n //= 3
        else:
            answer.append('4')
            n = n // 3 - 1
    
    if n > 0:
        answer.append(str(n))
            
    return ''.join(reversed(answer))

 

str하고 int 해준 것은 n=0으로 처음에 들어갈 때를 처리해준 것인데

함수를 안쓰니까 통과했다.

 


 

시간 복잡도

 

-

 

다른 사람의 풀이를 보면서 알게 된 점

 

divmod 함수

 

p, r = divmod(n, d)

 

divmod는 몫과 나머지를 같이 return해준다.

 

고찰

 

고득점 Kit을 끝내고 LV2 문제를 본격적으로 풀기 시작했는데 무섭다...

규칙은 감을 잡고 한눈에 보이지 않으면 진짜 답도 없는 경우라서 걱정된다.