코딩테스트 연습 - 124 나라의 숫자
programmers.co.kr
124나라에는 1,2,4만을 이용해서 숫자를 표현합니다. 즉, 10을 41로 표현합니다.
이 문제를 풀기 전 이 문제를 어떻게 해결할지 생각해보겠습니다.
1. 현재 124나라에는 숫자의 자리수를 표현할 때 3가지의 숫자만 사용합니다. => 3진수 표현일 것.
2. 이 나라에는 0이라는 숫자가 없습니다. => 그에 따른 처리방법 필요
변환되는 모습을 확인해보겠습니다.
10진수 : 1 2 3 4 5 6 7 8 9 10 11
3진수 : 1 2 10 11 12 20 21 22 100 101 102
변환 : 1 2 4 11 12 14 21 22 24 41 42
관찰해보면 3진수에서 124나라 표기법으로 변환할 때 1은 1으로, 2는 2로, 10은 4로 변환되는 모습을 확인할 수 있습니다.
10이라는 숫자가 4로 변환되는 모습이 보이는데, 0이라는 숫자가 없어 자리수를 빌려오는 모습입니다.
3이라는 숫자를 3진수로 -> 10
3이라는 숫자를 124표현으로 -> 4
6이라는 숫자를 3진수로 -> 20
6이라는 숫자를 124표현으로 -> 14
9이라는 숫자를 3진수로 -> 30
9이라는 숫자를 124표현으로 -> 24
관찰한 결과를 바탕으로 코드를 작성하겠습니다.
코드의 순서는 입력받는 10진수를 3진수로 변환한 후, 124나라의 표기법으로 변환하겠습니다.
def solution(n):
answer = ''
# 3진수로 변환
while n>=1:
answer = str(n%3) + answer
n = n//3
while True:
# 입력받은 숫자에 0이 있다면 124표기법이 아니므로 게속 변환합니다.
if '0' in answer:
# 04가 아닌 그냥 4로 바꾼다면 자리수가 없어집니다.
answer = answer.replace('10','04')
answer = answer.replace('20','14')
answer = answer.replace('40','24')
# 04일 경우 앞자리수를 제거해줘야합니다.
answer = answer.lstrip('0')
# 모든 숫자가 1,2,4로 변환되었다면 반복문을 종료합니다.
else:
break
return answer
'코딩테스트 준비 > 기타 문제들' 카테고리의 다른 글
프로그래머스 행렬 테두리 회전하기 - 파이썬 (0) | 2021.06.12 |
---|---|
숫자의 개수 - 백준 2577 파이썬 (0) | 2021.05.27 |
최대값과 최대값의 자리 수 찾기 - 백준 2562 파이썬 (0) | 2021.05.27 |
최대, 최소 찾기 - 백준 10818 파이썬 (2) | 2021.05.27 |
input()보다 더 빠른 입력 방법 sys.stdin.readlin() (0) | 2021.05.11 |