새소식

자료구조&알고리즘/알고리즘

Mathematic_BOJ #2745: 진법 변환

  • -

문제

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

 


Solution 1.

B진법 수 N을 10진법으로 출력해야 하는 문제이다.

2진법 수 1100을 10진법으로 출력해야한다고 가정하면

N의 element 값에 B의 해당 element의 idx승 만큼 각각 곱해서 더해주면 된다.

import sys
def input():
  return sys.stdin.readline().rstrip()

## solution 1. ##
# 진법
notation = "1234556789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# 입력
N, B = input().split()
N = list(N)
B = int(B)

# 10진법 변환
answer = 0
for i, val in enumerate(N[::-1]):
  if val.isalpha():
    answer += (notation.index(val) * (B ** i))
  else:
    answer += int(val) * (B ** i)

print(answer)

 

 

Solution2. int 함수를 이용한 짧은 풀이

파이썬의 경우 int함수를 통해 간단하게 n진법을 10진법으로 변환할 수 있다고 한다.

int(변환할 string, n진법)= string이 10진법으로 표현됨

 

import sys
def input():
  return sys.stdin.readline().rstrip()

N, B = input().split()

print(int(N, int(B)))
728x90
Contents