간단한 문제 같아 보였다.
그렇지만 아직 내가 수가 관련된 문제들에 익숙하지 않은지, 이런 류의 문제가 나오면 체감 난이도가 확 올라가는 경향이 있다.
익숙해질 필요가 있다!!
로직을 이야기해보자면,
- 우선 나머지를 이용하여 리스트를 쭉~ 만들고
- 그 리스트에서 0을 만나면 앞의 자리에 -1을 하고, 0이었던 자리에 4를 더하는 식이었다.
- 그 후 리스트를 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 => 몫, 나머지