Problem
16진수 1자리는 2진수 4자리로 표시된다.
N자리 16진수가 주어지면 각 자리 수를 4자리 2진수로 표시하는 프로그램을 만드시오.
단, 2진수의 앞자리 0도 반드시 출력한다.
예를 들어 47FE라는 16진수를 2진수로 표시하면 다음과 같다.
0100011111111110
[입력]
첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50
다음 줄부터 테스트 케이스의 별로 자리 수 N과 N자리 16진수가 주어진다. 1<=N<=100
16진수 A부터 F는 대문자로 표시된다.
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
Solving
아이디어
- 16진수를 한자리씩 계산한다. (ex: 4, 7, F, E)
- 16진수 숫자를 10진수로 변환한다. (4, 7, 15, 14)
ord() 함수 : 문자의 아스키코드값을 반환한다.
ord('0') - ord('0') = 0
ord('9') - ord('0') = 9
ord('A') - ord('A') + 10 = 10
ord('F') - ord('A') + 10 = 15 - 10진수 숫자를 2진수로 변환한다. (0100, 0111, 1111, 1110)
16진수 하나를 10진수로 바꾸었기 때문에 2진수 기준 자리수는 4자리
2^3, 2^2, 2^1, 2^0 으로 각각 계산
binary <- n을 2^power로 나눈 몫
n을 2^power로 나눈 나머지로 n을 갱신
코드
# 16진수 -> 10진수
def hex_to_decimal(n):
if ord('0') <= ord(n) <= ord('9'):
return ord(n) - ord('0')
return ord(n) - ord('A') + 10
# 10진수 -> 2진수
def decimal_to_binary(n):
binary = ''
for power in range(3, -1, -1):
binary += str(n // (2**power))
n %= (2**power)
return binary
for tc in range(1, int(input()) + 1):
N, in_num = input().split()
N = int(N)
result = ''
for num in in_num:
# 16진수 -> 10진수 -> 2진수 -> 합치기
result += decimal_to_binary(hex_to_decimal(num))
print('#{} {}'.format(tc, result))
'Algorithm Problem Solving > SWExpertAcademy' 카테고리의 다른 글
Programming Advanced [파이썬 S/W 문제해결 구현02 완전 검색] SWEA 5189 - 전자카트 (D3) (0) | 2021.04.16 |
---|---|
Programming Advanced [파이썬 S/W 문제해결 구현02 완전 검색] SWEA 5188 - 최소합 (D3) (0) | 2021.04.13 |
Programming Advanced [파이썬 S/W 문제해결 구현01 시작하기] SWEA 5186 - 이진수2 (D2) (0) | 2021.04.13 |
SWEA 1233 - 사칙연산 유효성 검사 (0) | 2021.04.11 |
SWEA 1231 - 중위순회 (0) | 2021.04.06 |