알고리즘 공부를 진행했습니다. Dynamic Programming과 수학을 주제로 3개의 문제를 풀고 해결 과정을 기록했습니다.
풀이
N, B = map(int, input().split())
ans = []
nlst = {'0':0, '1':1, '2':2,'3':3, '4':4, '5':5, "6":6, '7':7, '8':8,
'9':9, 'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16,
'H':17, 'I':18, 'J':19, 'K':20, 'L':21, 'M':22, 'N':23, 'O':24,
'P':25, 'Q':26, 'R':27, 'S':28, 'T':29, 'U':30, 'V':31, 'W':32,
'X':33, 'Y':34, 'Z':35}
reverse_nlst = dict(map(reversed, nlst.items()))
while N >= B:
ans.insert(0, N%B)
N = N // B
ans.insert(0, N)
for i in range(len(ans)):
ans[i] = reverse_nlst[ans[i]]
print(''.join(ans))
무슨 생각이었는지는 모르겠으나 .. 처음엔 진수 변환한 것에 따라 숫자를 지정해준다고 생각해서 '알파벳':정수 으로 딕셔너리를 만들었으나 생각해보니 반대로 해야 맞는 것 아닌가? 그래서 바아로 뒤집어주었다. 저걸 다시 쓸 엄두는 안 나서 그냥 map을 써서 뒤집었다. 굿.
우리가 실제로 직접 진수 변환을 할 때 거치는 과정을 생각해서 코드를 구현했다. 변환하려는 진수(여기서는 B)로 주어진 숫자(여기서는 N)를 계속해서 나눠준다. N이 B보다 작아질 때까지 나눠준 후, 그 때마다 생기는 나머지를 리스트에 추가해주면 완성이다!
후기
생각해보니 어차피 문자열로 만들어 제출하는 게 정답이라면 굳이 리스트를 만들지 않아도 될 거 같다. 리스트에서 문자열로 변환하는 과정을 빼고 다시 풀어서 소요 시간을 줄여봐야지~
풀이
while True:
try:
n = int(input())
except:
break
a=1
digit=1
while a%n != 0:
a += 10**digit
digit += 1
print(digit)
우선 빈 줄이 입력되면 코드를 끝내도록 while문을 사용해 예외처리를 해준다. 변수 2개를 지정해준다