[구름] 셀프레벨테스트 9차-진법 변환
문제 설명
10진법으로 표현된 정수 N을 특정한 r진법으로 표현하는 것은 매우 쉽다.
하지만 정수 N을 어던 진법으로 변환한 결과 T를 알고 있을 때 변환에 사용된 진법 r을 알아내는 것은 어려울 수 있다.
정수 N을 r진법으로 변환한 결과 T가 주어질 때, r을 구하는 프로그램을 작성하라, 예를 들어, N은 123이고 T가 323이라면 6을 출력해야 한다.
제한사항
Input Format
- 첫째 줄에 정수 N과 N을 r진법으로 변환한 결과 T가 공백으로 구분되어 주어진다.
(단, 1 ≤ N ≤ 2,000,000,000) -
이때, T는 알파벳 대문자 ‘A’~’F’를 포함하고 있을 수 있으며 각각 10부터 15까지에 대응된다.
- r은 2이상 16이하의 범위에 해당하는 케이스만 주어지고 불가능한 입력은 주어지지 않는다.
Output Format
- 진법 변환에 사용된 r을 출력한다.
Others
- 제한시간 : 5초
입출력 예
Sample Input
123 323
Sample Output
6
Sample Input
4576 3490
Sample Output
11
Idea
완전히 머리가 굳어버렸다.
너무 오랜 시간동안 생각했다.
그리고 문제에서 명확하게 설명해줬으면 좋겠다.
예를들어 입력을
12 c
이렇게 했다면,
13,14,15,16이 모두가 정답이다.
이럴경우에는 어떻게 해라라는 지시가 있으면 좋겠다.
Code
def solution(n, q):
ah_jji = ''
if q>10:
while n>0:
n, mod = divmod(n, q)
alphabet = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
if mod >= 10:
mod = alphabet[mod]
ah_jji += str(mod)
else:
while n > 0:
n, mod = divmod(n, q)
ah_jji += str(mod)
return "".join(ah_jji[::-1])
tenNum, targetNum = map(str, input().split())
for notation in range(2,17):
if solution(int(tenNum), notation) == targetNum:
print(notation)
break
Explain
뭔가 마음에 안든다..
alphabet이라고 핑계를 대고 싶은데..
ASCII 값을 이용해야 하나?..
댓글남기기