CodingTest) 진법 변환

JJONGHA2·2023년 4월 12일
0

CodingTest

목록 보기
2/5
post-thumbnail

Python 에서는 int() 함수를 지원합니다.

int(string, base)
  • string 에는 10진수로 변환하고 싶은 수로 이루어진 문자열
  • base 에는 진법

을 넣어서 n진수 → 10진수 변환이 가능합니다.

코드

print(int('111',2))
print(int('212',3))
print(int('321',4))

실행결과

7
23
57

10진수 → 2진수, 8진수, 16진수 변환을 해야 할 경우

  • Python 에서 기본적으로 지원하는 bin(), oct(), hex() 함수를 사용할 수 있습니다.

코드

print(bin(123)) # 2진수
print(oct(123)) # 8진수
print(hex(123)) # 16진수

실행결과

0b1111011
0o173
0x7b

하지만 10진수를 2진수, 8진수, 16진수 외의 다른 n진수에 대해 변환을 해야 할 떄가 있습니다.

  • 이 경우 진법 변환을 수행하는 함수를 작성하여 사용 가능 합니다.

    진법 변환 함수 (dictionaty를 하용하여 A, B, C, D, E, F 추가)

    dic  = {
           10 : 'A', 11 : 'B', 12 : 'C', 13 : 'D', 14 : 'E', 15 : 'F'
       }
    def calculator(n, q, dic):
       rev_base = ''
       if n == 0:
           return '0'
       while n > 0:
           n, mod = divmod(n, q)
           if mod >= 10:
               mod = dic[mod]
           rev_base += str(mod)
       return rev_base[::-1] 
  • mod 연산을 순차적으로 수행하기 때문에 함수 마지막 return 에서 반환할 때에는 문자열을 뒤집어 주는 것이 필수 입니다.

코드

print(calculator(123, 2, dic)) # 2진법
print(calculator(123, 4, dic)) # 4진법
print(calculator(123, 7, dic)) # 7진법
print(calculator(123, 16, dic)) # 16진법

실행결과

1111011
1323
234
7B
  • 진법 변환이 이루어진 모습을 볼 수 있으며

코드

print(int('1111011', 2))
print(int('1323', 4))
print(int('234', 7))
print(int('7B', 16))

실행결과

123
123
123
123
  • int( )를 사용하여 역으로 계산시 같은 값을 반환하는 것을 볼 수 있습니다.
profile
깡통훈련시키기

0개의 댓글