[프로그래머스] 124 나라의 숫자 [연습 문제] [python] Level2
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
설계 및 구현
접근 방식
주어진 숫자를 "124"로 진법변환을 시키는 문제이다.
문제에서는 숫자를 "124"의 3진법으로 변환을 시키라고 말하고 있다.
my_solution
def convert(n):
T = "124"
n -= 1
q, r = divmod(n, 3)
if q == 0:
return T[r]
else:
return convert(q) + T[r]
def solution(n):
return convert(n)
1. convert(n)함수
일단 T에 "124"문자열을 선언해 진법변환할 틀을 만들어 준다.
보통의 진법은 0부터 시작하지만 문제에서는 1부터 시작이므로 n -=1을 해준다.
n을 3으로 나눈 몫과 나머지를 구한다.
① 만약 q == 0이면 한자리수로 변환이 됬으니 자리에 맞는 T[r]을 반환해준다.
② q != 0 이면 convert(q) + T[r]을 통해 재귀적으로 2자리 이상의 문자열을 반환해주면 해결!
모범 solution
def change124(n):
num = ['1','2','4']
answer = ""
while n > 0:
n -= 1
answer = num[n % 3] + answer
n //= 3
return answer
재귀함수대신 반복문을 사용하였다.
반복문을 쓰니 if -else구문을 쓰지 않고서도 구현이 가능한 코드를 만들 수 있다.
반응형
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 [탐욕법(Greedy)] [python] (0) | 2020.09.23 |
---|---|
[프로그래머스] 문자열 압축 [2020 KAKAO BLIND RECRUITMENT] [python] (0) | 2020.09.22 |
[프로그래머스] 프린터 [스택/큐] [python] (0) | 2020.09.22 |
[프로그래머스] 기능개발 [스택/큐] [python] (0) | 2020.09.22 |
[프로그래머스] 다리를 지나는 트럭 [스택/큐] [python] (0) | 2020.09.22 |