반응형
D2, 구현, 수학
첫번째 제출 코드 (정답)
from collections import defaultdict
T = int(input())
dic = defaultdict(int)
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for i in range(ord('A'), ord('Z')+1):
dic[chr(i)] = i-65
for i in range(ord('a'), ord('z')+1):
dic[chr(i)] = i-65-6
dic.update({'0':52, '1':53, '2':54, '3':55, '4':56, '5':57, '6':58, '7':59, '8':60, '9':61, '+':62, '/':63})
for test_case in range(1, T + 1):
string = input()
temp = ""
for s in string:
temp += "".join(format(dic[s], 'b').zfill(6))
ans = ""
for i in range(0, len(temp), 8):
ans += chr(int(temp[i:i + 8], 2))
print(f"#{test_case} {ans}")
A-Z, a-z, 0-9, +, /를 딕셔너리에 Encoding 합니다.
입력받은 문자열의 문자들을 하나씩 2진수로 변환 시키고 zfill()로 6자리를 만들었습니다.
Encoding 된 암호를 다시 8비트씩 끊어서 2진수를 문자로 변경합니다 (여기서 문자에 해당하는 변수는 Based64 Decoder 암호 표가 아닌 기본 ascii 값을 이용, 이것을 빨리 알아내지 못해 시간이 지체되었네요)
결과 및 정리
지금 SSAFY를 대비해서 SWEA D2 정답률 높은 것부터 푸는데 이 문제는 생각보다 어려워서 구글링하면서 풀었습니다.
오늘 새롭게 알게 된 소소한 지식들입니다.
0010011 같은 문자열 타입의 2진수를 10진수로 바꾸는 방법: int(0010011, 2)
자리수를 0으로 채워 길이를 맞추는 방법: zfill()
다른 사람들은 어떻게 풀었나 궁금해서 정답을 맞춘 후 코드를 찾아보았습니다.
from base64 import b64decode
T = int(input())
for t in range(1, T + 1):
data = input()
ans = b64decode(data).decode('UTF-8')
print(f'#{t} {ans}')
라이브러리를 이용하여 풀었는데 너무 간결하게 나와서 놀랐습니다. 사실 검색하면서 라이브러리 사용을 생각봤지만 구현력을 기르는데는 라이브러리가 도움이 안될 것 같아 끝까지 제 코드를 고집했습니다.
그래도 나중에 도움이 될까 하고 남깁니다.
반응형
'ProblemSolving > 구현, 시뮬레이션, 완전탐색' 카테고리의 다른 글
프로그래머스 124 나라의 숫자 (파이썬) (0) | 2022.06.01 |
---|---|
프로그래머스 행렬 테두리 회전하기 (파이썬) (0) | 2022.05.24 |
프로그래머스 주차 요금 계산(파이썬) (0) | 2022.05.19 |
백준 23289 온풍기 안녕! (파이썬) (0) | 2022.04.28 |
백준 23291 어항정리 (파이썬) (2) | 2022.04.27 |