728x90
https://www.acmicpc.net/problem/12787
12787번: 지금 밥이 문제냐
평소에 전공 공부를 열심히 하는 황제는 시험기간에 형들이 IPv4, IPv6주소를 저장하는데 각각 최소 4바이트, 6바이트가 필요하다는 얘기를 듣고 아람이에게 질문했다. 황제: "IPv8주소를 저장하는
www.acmicpc.net
M == 1 일 때, 이진수로 변환했다가 다시 십진수로 변경해주는 것이 아니라 '.'을 기준으로 256**(8-i)를 곱해주면 간단하게 풀린다. 예시에 있는 01111111000000000000000000000001을 보면 01111111/00000000/00000000/00000001 인데 이들은 각각 127*(256^3) + 0*(256^2) + 0*(256^1) + 1*(256^0)인 것이다.
import sys
input = sys.stdin.readline
T = int(input())
def binary(num):
if num < 2:
return str(num)
return binary(num // 2) + str(num % 2)
def decimal(num):
temp = 0
idx = 0
for k in range(len(num)-1, -1, -1):
if int(num[idx]):
temp += 2**k
idx += 1
return temp
for tc in range(1, T+1):
# 부호 X : 1, 부호 O : 2
M, N = input().split()
if M == '1':
answer = 0
n_list = N.split('.')
for i in range(0, 8):
answer += int(n_list[i])*(256**(7-i))
print(answer)
else:
b_n = binary(int(N))
b_n = '0'*(64 - len(b_n)) + b_n
print('.'.join([str(decimal(b_n[i:i+8])) for i in range(0, len(b_n), 8)]))
'알고리즘' 카테고리의 다른 글
[백준] 1931. 회의실 배정 (0) | 2021.09.24 |
---|---|
[백준] 9935. 문자열 폭발 (0) | 2021.09.18 |
[SWEA] 1218. 괄호 짝짓기 (0) | 2021.09.16 |
[백준] 19583. 싸이버개강총회 (0) | 2021.09.15 |
[백준] 21737. SMUPC 계산기 (0) | 2021.09.15 |