백준문제풀이

백준 문제 3107번 IPv6 문제풀이 python

노가다 김씨 2022. 2. 25. 09:07

https://www.acmicpc.net/problem/3107

 

3107번: IPv6

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

www.acmicpc.net

문제해석

이 문제를 풀기위해서

콜론( : )을 기준으로 문자열을 분리할 필요가 있었고 그래서 파이썬을 사용하여 코드를 제출했다.

먼저 콜론을 기준으로 분리하여 리스트에 담고

리스트의 길이가 8보다 작으면 축약된 형태의 IP주소이므로

공백 문자열을 넣어서 리스트의 길이를 8로 강제로 맞춰준다음

리스트[0]부터 리스트 [7]까지 생략된 0을 채워주었다.

이렇게하면 축약되기전 IP주소 32개를 복구 할 수있다.

질문 게시판에서 보게 된 것인데 0000:1:: 와 같이 맨 끝이나 ::1와 같이 맨 앞이나 맨 뒤가 축약되어서 :: 이렇게 나온 테스트 케이스도 있는 모양이다 그 경우

32자리가 아닌 36자리가 나오길래 그 부분을 예외처리 시켜주었다.

 

코드

 

def f():
    for i in range(0,len(l)):
            if l[i]=='':
                return i


a=input()
if a[0]==':' and a[1]==':':
    a=a[1:]
elif a[-1]==':' and a[-2]==':':
    a=a[:-1]

l=a.split(':')
if len(l)<8:
    while len(l)<8:
        l.insert(f(),'')

a=""

for i in range(0,len(l)):
    while len(l[i])<4 :
        l[i]="0"+l[i]
    a=a+":"+l[i]

print(a[1:])