μ½”ν…Œ

[SWEA/Python] 1928. Base64 Decoder

yyyeun 2024. 5. 19. 21:06
 

SW Expert Academy

SW ν”„λ‘œκ·Έλž˜λ° μ—­λŸ‰ 강화에 도움이 λ˜λŠ” λ‹€μ–‘ν•œ ν•™μŠ΅ 컨텐츠λ₯Ό ν™•μΈν•˜μ„Έμš”!

swexpertacademy.com

 

문제λ₯Ό μ΄ν•΄ν•˜λŠ” 것뢀터 μ‹œκ°„μ΄ μ’€ κ±Έλ ΈλŠ”λ° μš”μ•½ν•˜μžλ©΄

 

1. input λ¬Έμžμ—΄μ˜ 각 문자λ₯Ό μ£Όμ–΄μ§„ ν‘œμ˜ 10μ§„μˆ˜ 숫자둜 λ§€ν•‘ν•œλ‹€.

2. 10μ§„μˆ˜ μˆ«μžλ“€μ„ 6λΉ„νŠΈμ§œλ¦¬ 2μ§„μˆ˜λ‘œ ν‘œν˜„ν•œλ‹€.

3. 8λΉ„νŠΈμ”© λŠμ–΄ 10μ§„μˆ˜ 숫자둜 ν‘œν˜„ν•œλ‹€.

4. 10μ§„μˆ˜ μˆ«μžλ“€μ„ μ•„μŠ€ν‚€ μ½”λ“œλ‘œ λ³€ν™˜ν•΄ decoding된 원문 ouput λ¬Έμžμ—΄μ„ 좜λ ₯ν•œλ‹€.

 

def base64_decode(encoded_string):
    base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
 
    decoded_string = ""
 
    decoding_table = {char: index for index, char in enumerate(base64_table)}
 
    buffer = 0
    count = 0
    for char in encoded_string:
        value = decoding_table[char]
         
        buffer = (buffer << 6) | value
        count += 6
 
        if count >= 8:
            count -= 8
            decoded_string += chr((buffer >> count) & 0xFF)
            buffer &= (1 << count) - 1
 
    return decoded_string
 
 
T = int(input())
 
for tc in range(1, T + 1):
    encoded_string = input()
    decoded_string = base64_decode(encoded_string)
    print(f"#{tc} {decoded_string}")

 

사싀 λ‚˜λŠ” 10μ§„μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό 직접 κ΅¬ν˜„ν•΄μ„œ ν’€μ΄ν•˜λ € ν–ˆλŠ”λ°, λŒ“κΈ€μ— 쒋은 풀이가 μžˆμ–΄μ„œ μ°Έκ³ ν–ˆλ‹€. (Ro_LCHλ‹˜..πŸ™)

 

μ‰¬ν”„νŠΈ μ—°μ‚°μžμ™€ λΉ„νŠΈ 연산을 μ‚¬μš©ν•΄ 2μ§„μˆ˜λ‘œ 직접 λ³€ν™˜ν•˜λŠ” 과정을 μƒλž΅ν•  수 μžˆμ—ˆκ³ ,

buffer에 6λΉ„νŠΈλ₯Ό μ μž¬ν•˜λ©° 8λΉ„νŠΈκ°€ λ„˜μ–΄κ°ˆ λ•Œ λ°”λ‘œ μ›λ¬ΈμœΌλ‘œ ν•œ κΈ€μžμ”© decoding을 μˆ˜ν–‰ν–ˆλ‹€.

 

λΉ„νŠΈ 연산을 μ˜€λž«λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ„œ 거의 잊고 μ‚΄μ•˜λŠ”λ° λ‹€μ‹œκΈˆ κ³΅λΆ€ν•˜λŠ” 계기가 됐닀! πŸ‘