코딩테스트/SWExpertAcademy

이진수 Python(SW Expert Academy)

멍토 2020. 5. 14.

난이도 : D2

문제번호 : 5185

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYDLaK1kMDFAVT

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


 

목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

예시

입력 출력
3
4 47FE
5 79E12
8 41DA16CD
#1 0100011111111110
#2 01111001111000010010
#3 01000001110110100001011011001101

2. 문제풀이

파이썬에서 지원하는 기능을 이용하면 바로 풀 수 있지만 취지에 맞지않으니까 정석대로 풀어보았다.

진수 공부를 하다보면 2진수 3자리는 8진수 1자리이고, 2진수 4자리는 16진수 1자리 라는 사실을 알게된다.

그렇다면 16진수 1자리를 2진수 4자리로 변환하여 출력하면 된다.

2로 나눠서 몫과 나머지를 구하는 방법도 있는데 비트연산해서 구하는 방법도 있어서 그걸로 해보았다.


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#D2 5185 이진수
 
hexa_to_decimal = {'A'10'B'11'C'12'D'13'E'14'F':15}
 
for t in range(int(input())):
    N, octa = input().split()
    answer = ''
    #들어온 16진수만큼 반복
    for i in octa:
        # hexa to decimal 하기
        if '0'<= i <= '9':
            temp = int(i)
        else:
            temp = hexa_to_decimal[i]
        #16진수는 2진수 4글자이므로 8을 이용함
        num = 8
        for _ in range(4):
            #비트연산해서 값이 나오면 1
            if temp & num:
                answer += '1'
            #값이 안나오면 0
            else: answer += '0'
            #비트연산하는 값을 반절 줄이기
            num >>= 1
 
    print('#{} {}'.format(t+1, answer))
 

댓글

💲 광고입니다.