[백준] 3107번 IPv6 ★★

거북이·2023년 8월 20일
0

백준[골드5]

목록 보기
68/82
post-thumbnail

💡문제접근

  • 문자열을 다루는 문제였는데 0을 채우는 경우에서 많이 헤맸던 문제였다.

💡코드(메모리 : 31256KB, 시간 : 40ms)

import sys
input = sys.stdin.readline

ipv6 = input().strip()
# 입력 문자열을 ":"을 기준으로 나눠 리스트에 담는다.
ipv6 = list(ipv6.split(":"))

result = [""] * 8
idx = 0
flag = 0
for i in range(len(ipv6)):
    # 각 칸이 4자라면 복구 전과 후가 동일하므로 그대로 옮긴다.
    if len(ipv6[i]) == 4:
        result[idx] = ipv6[i]
        idx += 1
    # 0보다 크고 4보다 작으면 0의 일부만 생략된 것이므로 해당하는 수만큼 0을 추가한다.
    elif len(ipv6[i]) > 0:
        result[idx] = '0' * (4 - len(ipv6[i])) + str(ipv6[i])
        idx += 1
    # 만약 0으로만 이루어져 있는 그룹이 있을 경우 그 중 한 개 이상 연속된 그룹을 하나 골라 콜론 2개로 바꿀 수 있다.
    # len(ipv6[i]) = 0
    else:
        # 0이 계속 나올 수 있을 때까지 반복문으로 0000을 채움
        if flag == 0:
            for j in range(8 - len(ipv6) + 1):
                result[idx] = "0000"
                idx += 1
            flag = 1
        # 하나의 그룹만 비어있는 경우 → 0000을 채움
        else:
            result[idx] = "0000"
            idx += 1

for i in range(len(result) - 1):
    print(result[i], end = ":")
print(result[-1])

💡소요시간 : 37m

0개의 댓글