본문 바로가기

Algorithm

SWEA 5185 이진수 (python)

반응형

[toc]

5185. [파이썬 S/W 문제해결 구현] 1일차 - 이진수 D2

문제

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


풀이과정

10이상의 숫자는 변환기를 따로 딕셔너리 형태로 만들어서 변환을 해주어야겠다고 생각했다

그리고 수를 어디서 부터 읽어올지 살짝 고민했었는데 나눈 나머지는 뒤에서 부터 앞으로 더해주어야 하고 한 사이클이 끝나면 다음 자리로 옮겨야했다.

초기에는 16진수를 이해를 제대로 하지못했다.

따라서 16진수는 무조건 4자리 즉 최대 1111까지 차지하는 수 인데

4와 같은 경우는 100 으로 표시하는 실수를 했다.

그래서 코드가 복잡해지기도 했다.

왜냐하면 그냥 4번 나누는 경우는 그냥 나머지만 출력하면 되지만

아닌 경우에는 마지막 2를 남기고 2일경우 '10'을 앞에 더해주고 1일경우 1을 더해주어야 했기 때문이다.

위에까지는 필요없고

실제로는 0100으로 해야해서 자리수와 상관없이 4번 나누고 몫과 나머지를 더하는 작업을 해야한다.


풀이

T = int(input())

# 10 이 넘는 숫자를 위한 변환기
converter = {'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15}

for tc in range(1, T+1):
    N, number = input().split()
    # 최종 값 초기화
    result = ''
    # 읽는거는 뒤에서 부터 읽어오자
    for n in number[::-1]:
        # 변환기 안에 있는 숫자라면 변환해주자
        if n in converter:
            n = converter[n]
        # 변환기 안에 없는 숫자는 str로 들어오기 때문에 변환해주기
        n = int(n)
        # 16진수는 무조건 4자리 차지하니 4번 반복해준다.
        for _ in range(4):
            result = str(n % 2) + result
            n //= 2

    print("#{} {}".format(tc, result))
반응형

'Algorithm' 카테고리의 다른 글

SWEA 5177 이진 힙 (python)  (0) 2021.04.13
SWEA 10729 이진수 표현 (python)  (0) 2021.04.13
SWEA 5186 이진수2 (python)  (0) 2021.04.13
SWEA 1240 단순 2진 암호코드 (python)  (0) 2021.04.13
SWEA 5178 노드의 합 (python)  (0) 2021.04.11