문제 설명

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 값을 이용해야 하나?..




댓글남기기