
프로그래머스 LV1 3진법 뒤집기
2021, Mar 31
프로그래머스 lv1 3진법 뒤집기
while
활용에 익숙해져야 함
몫과 나머지를 반환하는 함수 divmod(n, base)
이걸 n, r = divmod(n, base)
로 사용
풀이
def solution(n):
base_3 = []
temp =[]
while n > 0:
n, r = divmod(n, 3)
print(r)
base_3.append(r)
print(base_3)
multi = 1
for i in reversed(base_3):
print("i:",i)
print("multi:",multi)
multiply = (i * multi)
temp.append(multiply)
print("temp:",temp)
multi *=3
# temp = ''.join(map(str, reversed(base_3)))
return sum(temp)
if __name__ == '__main__':
n = 45
print(solution(n))
# 다른 사람 풀이
def solution(n) :
answer = 0
temp = '' # 3진법으로 결과를 저장할 변수
# 문제에서 보여준 입출력 예시의 단계 중
# n (3진법)을 건너 뛰고 n(10진법) -> 앞뒤 반전(3진법)으로 바로 진행
while n :
temp += str(n % 3)
n = int(n / 3)
multi = 1 # 3의 승수 계산용 변수
for i in reversed(temp) :
answer += int(i) * multi # 자릿값 * 3의 승수 를 통해 10진수로 변환
multi *= 3
return answer
if __name__ == '__main__':
n = 45
print(solution(n))
승수 계산용 변수를 만들어서 곱하는 방식
# 다른 사람 풀이2
def n_ary(n, base):
result = []
while n > 0:
n, r = divmod(n, base)
result.append(r)
return ''.join(map(str, reversed(result)))
def an_solution(n):
b3 = n_ary(n, 3)
b3 = b3[::-1]
return int(b3, 3)
if __name__ == '__main__':
n = 45
print(an_solution(n))
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges