[알고리즘 기초] - 303-수학1(참고)

양진혁·2022년 11월 25일
0

백준

목록 보기
17/21

11005_진법 변환 2

⭕풀이:

from sys import stdin

tmp = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

N, B = map(int, stdin.readline().split())
answer = ''

while N != 0:
    answer += str(tmp[N % B])
    N //= B

print(answer[::-1])



⭕풀이설명:

이번에도 진법변환의 핵심을 이용하면 문제는 쉬운 문제입니다.
예시로 7777이라는 10진수 숫자가 있습니다.
7777을 10으로 나누면 몫은 777이며 나머지 값은 7입니다.
구한 몫인 777을 10으로 나누면 몫은 77이며 나머지 값은 7이고,
또 구한 몫인 77을 10으로 나누면 몫은 7이며 나머지 값은 7입니다.
10진수에서 7은 7번째 숫자를 의미합니다.
해당 숫자들을 추가하면 답은 7777입니다.

7777을 36진수로 해줄 때에도 이와 같습니다.
7777을 36으로 나누면 몫은 216이고, 나머지 값은 1입니다.
구한 몫인 216을 36으로 나누면 몫은 6이고, 나머지 값은 0입니다.
이를 순서대로 답에 나열하면
7777을 36진법으로 표현하면, 601입니다.

📌필요지식


2745_진법 변환

⭕풀이:

N, B = input().split()
print(int(N, int(B)))  #int(value,a)는 value를 숫자 a진법으로 인식한다는 것을 이용.

11576_진법 변환

⭕풀이:

A, B = map(int, input().split())
m = int(input())
arr = list(map(int, input().split()))
ten = 0

for i in range(m):
    ten += arr[m - i - 1] * A ** i  #i는 정방향이므로, arr을 반대방향부터 반복하게 해 (arr의 뒷 자릿수 * A진법의 수 ** i)를 A진법으로 나온 숫자의 배열 arr을 10진법으로 변환해 ten에 변수선언한다.

ans = ""  #B진법으로 나올 ten의 값

while ten:
    ans = " " + ans
    ans = str(ten % B) + ans
    ten //= B

print(ans)

⭕풀이설명:

① 입력받은 arr을 각 자릿수에 맞춰 해당진법으로 계산 하면 10진법으로 변환할 수 있습니다.
② 변환된 10진법의 수 ten을 B진법으로 변환시키고,
③ 출력할 때 자릿수 사이에 띄어쓰기를 넣어줘야 하므로 변환 직전마다 공백을 넣습니다.

profile
타이밀크티는 맛있습니다.

0개의 댓글