[알고리즘] 프로그래머스 : 3진법 뒤집기 - 레벨 1

eternal moment·2023년 9월 6일
0

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/68935#

2. 문제 접근

1) 우선, 10진법인 n을 계속 나누었을 때의 나머지로 문제를 풀 수 있을 거라 생각함.
2) 근데 n은 1 이상 100,000,000 이하인 자연수로, 3으로 계속해서 나누어가는 풀이로는 최악의 경우의 수에서 시간초과가 나지않을까 생각
-> 반복문 외의 풀이 궁금했으나 잘 떠오르지 않음

3. 문제 풀이

def solution(n):
    answer = 0
    s=''
    k=0
    while True:
        s+=str(n%3)
        n//=3
        if 0<n<3:
            s+=str(n)
            break
        if n<1:
            break
    s=list(map(int, s))
    while s:
        answer+=s.pop()*(3**k)
        k+=1
        
    print(s, k, answer)
    return answer

4. 다른 풀이

1

def solution(n):
    answer = ''
    
    while(n >= 1):
        rest = n % 3
        n = n // 3
        answer += str(rest)
    
    return int(answer, 3)

print(solution(45))

2

def solution(n):
    answer = ''

    while n > 0:			
        n, re = divmod(n,3)	# n을 3으로 나눈 몫과 나머지
        answer += str(re)
    return int(answer, 3)

5. 체크 포인트

  • 문자열 뒤집기 : ref
    1. slice() : s=str[::-1]
    2. reversed() : s="".join(reversed(string))
    3. 반복문
  • divmod()함수를 통해 몫과 나머지를 구할 수 있음 (2개의 값 리턴)

0개의 댓글