백준 3107 IPv6

gmlwlswldbs·2021년 11월 6일
0

코딩테스트

목록 보기
76/130
g = list(input())
start = -1
for i in range(0, len(g)-1):
    if g[i] == g[i+1] == ':':
        start = i
if start != -1:
    g = g[:start+1] + [':'] * (7-g.count(':')) + g[start+1:]
if g[0] == ':':
    del g[0]
if g[-1] == ':':
    del g[-1]
ans = [['-1'] * 4 for _ in range(8)]
k = 7
i = len(g)
j = 3
while i > 0:
    i -= 1
    if g[i] == ':':
        k -= 1
        j = 3
        continue
    ans[k][j] = g[i]
    j -= 1
for i in range(8):
    for j in range(4):
        if ans[i][j] == '-1':
            ans[i][j] = '0'
for i in range(8):
    for j in range(4):
        print(ans[i][j], end='')
    if i != 7:
        print(':', end='')

입력 받음 -> :: 부분을 찾음 -> ::부분을 늘려서 :의 갯수를 7개로 맞춤 -> ans에 g의 맨 끝에서부터 넣는데 숫자가 있으면 숫자를 넣고 없고 0을 넣어야할때(각 그룹 앞자리에 생략된 0)인 경우 :를 만나기 때문에 걍 둠(-1인채로 남는다) -> ans에 존재하는 -1을 모두 0으로 바꾼다음 출력

처음에

if g[0] == ':':
    del g[0]
if g[-1] == ':':
    del g[-1]

이 부분이 없었는데
1:2:3:4:5:6:7:: -> 0001:0002:0003:0004:0005:0006:0007:0000
게시판에서 이런 것을 찾았고 만약 맨 앞이나 맨 위에 :: 이 온다면 하나 삭제해줬다
:을 항상 총 7개 만든다고 가정하고 문제를 풀었기 때문에 저 부분이 없으면 위의 반례에서는 :이 총 8 개가 되어서 ans에 숫자를 순차적으로 배치할 수 없음
-> 간단하게 할 수 있는지 생각해보기..

0개의 댓글