문제 풀이 전에 기본 개념을 정리해보자.
1. 10진수 → 2진수, 8진수, 16진수
10진수를 다른 진수형태로 변환하는 방법은 2가지가 있다.
(1) 진수별 변환함수 사용
Python 내장함수를 통해 10진수를 2진수, 8진수, 16진수의 문자열로 변환할 수 있다.
진수 | 함수 |
2진수 | bin() |
8진수 | oct() |
16진수 | hex() |
a = 15
print('2진수:' + bin(a))
print('8진수:' + oct(a))
print('16진수:' + hex(a))
###결과###
#2진수:0b1111
#8진수:0o17
#16진수:0xf
출력결과를 보면 숫자 앞에 각각 0b, 0o, 0x가 붙어있는 것을 알 수 있다. 이것은 뒤에 있는 숫자가 어떤 진수의 숫자인지 나타내는 접두사이다. 즉 0b1111은 0b + 1111이 조합된 문자열로 1111(2)를 의미한다. 이 사실을 알면 CodeUp #1036 문제를 절반 정도 풀 수 있다.
(2) format() 함수 사용
format() 함수의 2번째 인자로 진수형태를 지정하여 변환할 수 있다.
a = 15
print(format(a, '#b'))
print(format(a, '#o'))
print(format(a, '#x'))
####결과####
0b1111
0o17
0xf
이때, #을 빼면 접두사를 제외한 변환한 값 만을 출력한다.
a = 15
print(format(a, 'b'))
print(format(a, 'o'))
print(format(a, 'x'))
####결과####
1111
17
f
2. 2진수, 8진수, 16진수 → 10진수
다른 진수형태를 10진수를 변환하기 위해서는 int()함수를 사용할 수 있다. int(변환할 값, 변환할 값의 진수형태)로 지정하여 사용하면 된다.
print(int('0b1111',2))
print(int('0o17',8))
print(int('0xf',16))
####결과####
15
15
15
두 번째 인자의 기본값은 10이기 때문에 하나의 인자만 사용하면 10진수로 변환되었던 것이다.
#1031.
a = int(input())
print('%o' % a)
#10
#12
#1032.
a = int(input())
print('%x' % a)
#255
#ff
#1033.
a = int(input())
print('%X' % a)
#255
#FF
#1034.
a = '0o' + input()
print(int(a,8))
#13
#11
#1035 : [기초-출력변환] 16진 정수 1개 입력받아 8진수로 출력하기(설명)
Q) 16진수로 입력된 정수 1개를 8진수로 바꾸어 출력해보자.
이 문제를 풀기 위해서는
입력 받은 10진수를 16진수로 바꿔주고, --- 1)
16진수를 8진수로 바꿔줘야한다. ---2)
1) 입력 받은 10진수를 16진수로 바꿔주기
C 언어에서는 입력 받는 데이터의 진수형태를 세팅해서 받을 수 있는 함수가 있는 것 같은데,, Python은 아무리 찾아도 그런 기능을 찾기가 어려웠다. (혹시 아는 분 있으면 댓글 부탁..) 그런데 앞에 문자를 붙임으로써 진수형태를 지정할 수 있다는 사실을 알고 실마리를 찾았다.
# Step1. 10진수 --> 16진수
a = input()
a = '0x' + a # 입력문자열을 16진수 문자열로 변환
2) 16진수를 8진수로 바꿔주기
16진수를 바로 8진수로 바꿔줄 수 있을 것 같지만 사실 아니다. oct()나 format()함수의 인자는 모두 정수로 받아야하기 때문에 16진수를 10진수로 한번 바꿔주고 이를 다시 8진수로 바꿔주는 과정을 거쳐야한다.
# Step2. 16진수 --> 10진수 --> 8진수
a_10 = int(a, 16)
print(format(a_10,'o'))
## 결과 ##
입력 : f
출력 : 17
변환한 값 자체만 출력해야하기 때문에 format() 함수에서 #을 제외한 파라미터를 사용했다.
정답
# Step1. 10진수 --> 16진수
a = input()
a = '0x' + a # 입력문자열을 16진수 문자열로 변환
# Step2. 16진수 --> 10진수 --> 8진수
a_10 = int(a, 16)
print(format(a_10,'o'))
## 결과 ##
입력 : f
출력 : 17
#1036.
a = input()
print(ord(a))
#A
#65
ord() 함수를 이용하면 문자를 아스키 코드로 변환할 수 있다.
#1037.
a = int(input())
print(chr(a))
#65
#A
chr() 함수를 이용하면 아스키코드를 문자로 변환할 수 있다.
'Algorithm' 카테고리의 다른 글
29th. CodeUp #1506 : [기초-논리연산] 참/거짓이 서로 다를 때에만 참 출력하기 (0) | 2020.12.14 |
---|---|
이것이 코딩테스트다 chapter12 구현 연습문제 (0) | 2020.12.07 |
이것이 코딩테스트다 Chapter 4 구현 (0) | 2020.12.05 |
CodeUp 기초100제 [기초-데이터형] 문제풀이 (#1028~#1030) (0) | 2020.11.25 |
CodeUp 기초100제 [기초-출력] 문제 풀이(#1001~#1008) (0) | 2020.11.25 |