[SWEA] 1928. Base64 Decoder

Hyerin·2022년 11월 7일
0

SWEA

목록 보기
5/13

문제

다음과 같이 Encoding 을 한다.

  1. 우선 24비트 버퍼에 위쪽(MSB)부터 한 byte씩 3 byte의 문자를 집어넣는다.

  2. 버퍼의 위쪽부터 6비트씩 잘라 그 값을 읽고, 각각의 값을 아래 [표-1] 의 문자로 Encoding 한다.

입력으로 Base64 Encoding 된 String 이 주어졌을 때, 해당 String 을 Decoding 하여, 원문을 출력하는 프로그램을 작성하시오.

[제약사항]

문자열의 길이는 항상 4의 배수로 주어진다.
그리고 문자열의 길이는 100000을 넘지 않는다.

[입력]

입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.
테스트 케이스는 Encoding 된 상태로 주어지는 문자열이다.

[출력]

테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)


  1. 입력값을 인덱스값으로 변환
  2. 인덱스값을 2진수로 변환
  3. 빈 칸을 0으로 채우기
  4. 10진수로 바꾸기 위해 8자리로 만들기 (입력값*6)//8
  5. 아스키값, 인코딩 값으로 변환하기

# dic 리스트에 인코딩 값 넣기
dic = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
      'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
      '0','1','2','3','4','5','6','7','8','9','+','/' ]

T = int(input())
for test_case in range(1, T + 1):
    word = list(input())
    value = '' 
    
    for j in range(len(word)):
    
        # num 변수에 dic 리스트 인덱스값 넣기
        num = dic.index(word[j])
        
        # 2진수로 변환하고 맨 앞의 '0b'를 제거하기 위해 2번 인덱스부터 저장하기
        bin_num = str(bin(num)[2:])
        
        # bin_num 값 빈 자리를 0으로 채우기
        while len(bin_num) < 6:
            bin_num = '0' + bin_num
        value += bin_num
            
    result = ''
    
    # 10진수로 변환하기 위해 8자리로 만들어줌 (입력값*6) // 8
    for k in range(len(word)*6 // 8):
    
        # 10진수로 변환
        number = int(value[k*8 : k*8+8], 2)
        result += chr(number)
    print('#%d %s' % (test_case, result))

<출처>
https://unie2.tistory.com/978

profile
DevOps, 코딩 기록

0개의 댓글