본문 바로가기
백준알고리즘/문자열

(Python/🥇5)백준알고리즘 3107번: IPv6

by windy7271 2024. 6. 7.
728x90
반응형

문제 바로가기 

IPv6

문제:

IPv6은 길이가 128비트인 차세대 인터넷 프로토콜이다. IPv6의 주소는 32자리의 16진수를 4자리씩 끊어 나타낸다. 이때, 각 그룹은 콜론 (:)으로 구분해서 나타낸다. 예를 들면, 다음과 같다. 2001:0db8:85a3:0000:0000:8a2e:0370:7334 32자리의 16진수는 사람이 읽고 쓰기에 불편하고, 대부분의 자리가 0이기 때문에 아래와 같이 축약할 수 있다. 각 그룹의 앞자리의 0의 전체 또는 일부를 생략 할 수 있다. 위의 IPv6을 축약하면, 다음과 같다 2001:db8:85a3:0:00:8a2e:370:7334 만약 0으로만 이루어져 있는 그룹이 있을 경우 그 중 한 개 이상 연속된 그룹을 하나 골라 콜론 2개(::)로 바꿀 수 있다. 2001:db8:85a3::8a2e:370:7334 2번째 규칙은 모호함을 방지하기 위해서 오직 한 번만 사용할 수 있다. 올바른 축약형 IPv6주소가 주어졌을 때, 이를 원래 IPv6 (32자리의 16진수)로 복원하는 프로그램을 작성하시오.

입력:

첫째 줄에 올바른 IPv6 주소가 주어진다. 이 주소는 최대 39글자이다. 또한, 주소는 숫자 0-9, 알파벳 소문자 a-f, 콜론 :으로만 이루어져 있다.

출력:

첫째 줄에, 입력으로 주어진 IPv6의 축약되지 않은 형태를 출력한다.

 

풀이 :

import sys

word = input().split(":")
res = []
check_continuity = False
for i in word:
    if i == "" and not check_continuity:
        res += ['0000' for _ in range(8-len(word)+1)]
        check_continuity = True
    else:
        res.append(i.zfill(4))
print(":".join(res))

 

::1 인경우에 자르면

"" "" 1 이렇게 나오기 때문에

check_continuity로 연속적인경우를 확인해야한다.

 

반응형

댓글