[프로그래머스 / lv.2] 124 나라의 숫자
in Problem Solving on Programers
날짜: 2021년 6월 4일
소요 시간: 1시간 10분 48초
카테고리: 수학문제
태그: 레벨2
, 파이썬
입출력 예시
10진법 | 124 나라 | 10진법 | 124 나라 |
---|---|---|---|
1 | 1 | 6 | 14 |
2 | 2 | 7 | 21 |
3 | 4 | 8 | 22 |
4 | 11 | 9 | 24 |
5 | 12 | 10 | 41 |
내가 적은 코드
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정도 수준의 문제였다.