## solution
N,B가 첫 줄에 주어질때, 10진법 수 N을 B진법으로 출력
N을 B^x로 계속 나누면 된다.
2^30이 10억정도 인것 같아서 2^30부터 2^1까지 나누었다.
좋은 풀이는 아닌것 같은데 다른 방법이 떠오르지 않는다.
숏코딩에서
```chr(n%b+[48,55][n%b>9])+s
```
이 부분이 나누어서 더하는 부분인것 같은데 어떤 방법인지 모르겠다... 처음 나누는 숫자는 어떻게 정하는거지? 큰 숫자부터 먼저 나누어야 되는것 아닌가
채점하는데 오래걸리던데 pypy3이 아닌 python3으로 제출했다면 에러가 떴을것 같다. 별로 차이 없을수도 있고..
## CODE
```python
N,B = map(int,input().split())
n = ''
for k in range(30,-1,-1):
add = N//(B**k)
if add > 9:
add = chr(add + 55)
elif add == 0:
if n == '':
add = ''
else:
add = '0'
else:
add = str(add)
n += add
N = N%(B**k)
print(n)
```
제출한 코드, chr(65) = A 라는건 기억해두자. 파이썬으로 바로 알수 있기는 한데...
```python
N,B = map(int,input().split())
n = ''
for k in range(30,-1,-1):
add = N//(B**k)
if add > 9:
add = chr(add + 55)
if add == 0:
add = ''
n += add
N = N%(B**k)
print(n)
```
이 코드는 if에 해당하지 않는 경우 str이 아니라서 더할때 에러가 발생하고
```python
N,B = map(int,input().split())
n = ''
for k in range(30,-1,-1):
add = N//(B**k)
if add > 9:
add = chr(add + 55)
elif add == 0:
if k == 0:
add = '0'
else:
add = ''
else:
add = str(add)
n += add
N = N%(B**k)
print(n)
```
이 코드는 중간에 나오는 0은 더해지지 않아서 틀린 코드다.
```python
n,b=map(int,input().split())
s=""
while n:s=chr(n%b+[48,55][n%b>9])+s;n//=b
print(s)
```
짧은 코드들이랑 방식이 크게 다른것 같지는 않은데 정확한 의미를 모르겠다. [48,55] ??
0 댓글