[프로그래머스 / lv.2] 124 나라의 숫자


날짜: 2021년 6월 4일
소요 시간: 1시간 10분 48초
카테고리: 수학문제
태그: 레벨2, 파이썬

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

입출력 예시

10진법124 나라10진법124 나라
11614
22721
34822
411924
5121041

내가 적은 코드

def solution(n):
    arr = []
    while n != 0:
        n -= 1
        i = n % 3
        arr.append('124'[i])
        n //= 3
    return "".join(arr[::-1])

풀이 과정

3진법 만드는 로직과 비슷하게 작동하나 1의 자리 수가 0이 없다는 점을 감안해서 n-1을 하여 풀어줘야 한다.

0 대신 1 / 1 대신 2 / 2 대신 4
이렇게 들어가게끔 문자열 인덱싱을 해 주었고,

리스트에 append해서 마지막에 거꾸로 뒤집은 리스트를 join함수로 문자열화 시켰다.
사실 그냥 처음부터 문자열로 풀었으면 훨씬 간단했을 코드이다.

베스트 코드

# 베스트 코드 1
def change124(n):
    num = ['1','2','4']
    answer = ""

    while n > 0:
        n -= 1
        answer = num[n % 3] + answer
        n //= 3

    return answer

나와 같은 방식으로 풀었으나 나는 리스트로 풀었고 이 분은 문자열으로 풀었다.
문자열이 좀더 효율적인 것 같긴 하다.
대신 이 분은 1,2,4를 리스트에 넣어서 인덱싱 해줘서 나와 반대로 바보같은 짓을 했다.

# 베스트 코드 2
def change124(n):
    if n<=3:
        return '124'[n-1]
    else:
        q, r = divmod(n-1, 3) 
        return change124(q) + '124'[r]

재귀함수로 풀어 훨씬 깔끔해진 코드.
재귀함수도 익숙해 질 필요가 있을 것 같다.

반성

  • 로직을 생각해 내는데 너무 많은 시간을 허비하였다. 말이 level.2 이지 사실 로직이 조금 복잡한 1정도 수준의 문제였다.




© 2021. by hminkim