[Python] 백준 12174번: #include <Google I/O.h>

Jonie Kwon·2022년 4월 21일
0


https://www.acmicpc.net/problem/12174

풀이

string 모듈을 이용해서 binary를 key, 모든 문자를 value로 하는 딕셔너리를 만든다.
케이스 마다 replace로 I와 O를 1, 0으로 바꿔주고, 8개씩 끊어서 딕셔너리에 해당하는 값으로 바꾸어 출력한다.

코드

import sys
import string
input = sys.stdin.readline
t = int(input())
ascii_dict = {int(bin(ord(x))[2:]):x for x in string.ascii_letters+string.digits+string.punctuation+string.whitespace}
for case in range(t):
    n = int(input())
    x = input().rstrip()
    x = x.replace("O", "0")
    x = x.replace("I", "1")
    print(f"Case #{case+1}: ", end="")
    for i in range(0, 8*n, 8):
        s = x[i:i+8]
        print(ascii_dict[int(s)], end="")
    print()

너무 더럽..게 푼거 같아서 다른분의 코드를 확인해봤다.ㅠ

다른 풀이

for case in range(int(input())):
    b = int(input())
    s = input().replace('O', '0')
    s = s.replace('I', '1')
    res = "".join([chr(int(s[8*i:8*(i+1)], 2)) for i in range(b)])
    print(f"Case #{case+1}: {res}")
  • int(x, base=10), char()
    2진수를 10진수로 바꾸고 바꾼 숫자를 다시 char로 변경해서 출력해 준다.
profile
메모하는 습관

0개의 댓글