124 나라의 숫자

김민석·2021년 3월 14일
0

오답노트 Lv.2

목록 보기
5/8

문제

문제 링크

간단한 문제 같아 보였다.
그렇지만 아직 내가 수가 관련된 문제들에 익숙하지 않은지, 이런 류의 문제가 나오면 체감 난이도가 확 올라가는 경향이 있다.
익숙해질 필요가 있다!!

나의 풀이

로직을 이야기해보자면,

  1. 우선 나머지를 이용하여 리스트를 쭉~ 만들고
  2. 그 리스트에서 0을 만나면 앞의 자리에 -1을 하고, 0이었던 자리에 4를 더하는 식이었다.
  3. 그 후 리스트를 string화 하여 return 해주며,
    이 때, 해당 자리가 3이면, 2로 바꿔준 것 뿐이 없다.
    (4 -> 2 -> 1 이므로)
def solution(n):
    answer = []
    
    strs = '124'
    
    while n :
        answer.append(strs[n%3-1])
        n = n//3
    
    for idx in range(len(answer)-1):
        if answer[idx] <= 0:
            answer[idx] += 4
            answer[idx+1] -=1
    answer = str(int(''.join(map(str,answer[::-1])))).replace('3','2')
    return answer

다른 사람의 풀이

깔끔한 풀이가 많았지만 아래 코드가 가장 인상 깊었고 배우고 싶다는 생각이 들어서 갖고왔다.

(내가 아직 어려워하는 재귀를 사용했다는 점. 그리고 나머지를 이용하여 숫자를 저렇게 표현 할 수 있다는 점)

def change124(n):
    if n<=3:
        return '124'[n-1]
    else:
        q, r = divmod(n-1, 3) 
        return change124(q) + '124'[r]

설명:

divmod

divmod(a,b)는 몇 번 보았었는데 아직 익숙치가 않다.

divmod(a,b)는 값 두 개를 동시에 리턴한다.

a//b, a%b => 몫, 나머지

0개의 댓글