Algorithm/Programmers

[Programmers - lv01] 3진법 뒤집기(Python)

  • -
728x90

programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

문제 설명

주어지는 자연수 n을 3진법으로 바꾸고 그 3진법을 앞뒤로 뒤집은 후 이를 다시 10진법으로 표현한 수를 구하는 문제.

 

문제 풀이

  1. 3진법으로 바꾼 수를 담는 tmp를 ""로 초기화한다.
  2. 주어진 자연수 n을 3으로 나눈 나머지를 문자열로 변환하여 tmp의 뒤에 붙인다.
  3. n을 3으로 나눈 몫을 n에 다시 담는다.
  4. n이 0이될때까지 2~3 과정을 반복한다.
  5. 결과는 앞뒤로 뒤집어진 형태의 문자열이다.
  6. 만약 왼쪽에 0이 남아있다면 의미 없는 숫자이므로, strip을 이용하여 제거해준다.
  7. tmp에 남아있는 숫자를 for 문으로 순회하며 10진수 변환 해준다.

소스 코드

Python3

def solution(n):
	answer = 0
	tmp = ""
	while n:
		tmp += str(n%3)
		n//=3
	tmp = tmp.lstrip('0')
	for i, t in enumerate(tmp):
		print(answer)
		answer += int(t) * 3 ** (len(tmp) -(i + 1))

	return answer

 

3진수로 변환하는 과정은 그렇다 쳐도 10진수 변환하는 과정이 마음에 들지 않아 다른 풀이를 봤다.

역시 파이썬은 강력한 녀석이었다. 그냥 형변환 용도로 사용되는줄 알았던 int()가 놀라운 역할을 했다.

 

def solution(n):
	answer = 0
	tmp = ""
	while n:
		tmp += str(n%3)
		n//=3
	answer = int(tmp, 3)

 

728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.