백준 2064 IP주소

gmlwlswldbs·2021년 11월 6일
0

코딩테스트

목록 보기
75/130
n = int(input())
t = [[0] * 4 for _ in range(n)]

for i in range(n):
    t[i] = list(map(int, input().split('.')))

b = [[] for _ in range(n)]

for i in range(n):
    for j in range(3, -1, -1):
        m = t[i][j]
        cnt = 0
        while cnt < 8:
            if m % 2 == 0:
                b[i].append(0)
            else:
                b[i].append(1)
            m = int(m/2)
            cnt += 1

out = False
m = -1
for i in range(len(b[0])-1, -1, -1):
    tmp = 0
    for j in range(n):
        tmp += b[j][i]
    if tmp != 0 and tmp != n:
        m = i
        out = True
    if out == True:
        break

tmp_ip = [0] * 32
tmp_mask = [0] * 32

for i in range(len(b[0])-1, m, -1):
    tmp_ip[len(b[0]) - 1 - i] = b[0][i]
    tmp_mask[len(b[0]) - 1 - i] = 1

ip = [0] * 4
mask = [0] * 4
k = 0
for i in range(0, 32, 8):
    for j in range(0, 8):
        ip[k] += (tmp_ip[i + j] * (2**(7-j)))
        mask[k] += (tmp_mask[i + j] * (2**(7-j)))
    k += 1


print(*ip, sep='.')
print(*mask, sep='.')

ip 주소 입력 받음 -> 2진법으로 바꿈 -> m 값 구함 -> 2진법으로 네트워크 주소와 네트워크 마스크 구함 -> 십진법으로 바꿈

처음에

out = False
for i in range(len(b[0])-1, -1, -1):
    tmp = 0
    for j in range(n):
        tmp += b[j][i]
    if tmp != 0 and tmp != n:
        m = i
        out = True
    if out == True:
        break

이런 식으로 m 초기값 지정하지 않아서 틀림
반례
2
255.255.255.255
255.255.255.255
이고 그래서 초기값을 -1로 지정해줌

0개의 댓글