백준 3107 - IPv6 (Python)

2024. 1. 29. 04:16알고리즘

문제

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

 

3107번: IPv6

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

www.acmicpc.net

풀이

ip = input()
#하나의 그룹을 :: 로 변경한 경우
if ip.count(":") ==8:
    ip = ip.replace("::",":")
#두개 이상의 그룹을 ::로 변경한 경우
ip = ip.replace("::",(7-ip.count(":"))*":" + "::")
ip = ip.split(":")

#각 그룹내에서 0이 생략된 경우
for i in range(len(ip)):
    if len(ip[i]) < 4:
        ip[i] = (4-len(ip[i]))*'0'+ip[i]

print(":".join(ip))

 

파이썬을 이용하여 풀면 간단하게 풀 수 있는 문자열 문제이다.

다만, 예외상황을 생각하고 처리하는데 시간이 조금 들었다.

 

내가 푼 방식에서는 3가지의 상황이 나온다

1) 하나의 0000그룹을 :: 로 치환한 경우

예시)
1111:2222::3333:4444:5555:6666:7777:8888

이 경우 :: 을 :로 바꾸어주었다.

 

2) 두 개 이상의 0000 그룹을 ::로 치환한 경우

예시)
1111:2222::5555,6666,7777,8888

이 경우 ::를 삭제하고 해당 위치에 총 콜론의 개수가 7개가 되도록 콜론을 추가해주었다.

 

3) 각 그룹 내에서 0을 생략한 경우

예시)
1:2:3:4:5:6:7:8

for 문을 돌면서 0을 추가하여 각 그룹의 자릿수를 4로 맞추어 주었다.

 

 

처음에는 :를 기준으로 split을 우선 진행한 후 생각하였는데 이 경우 맨 앞에 ::이 오는 경우와 맨 뒤에 ::이 오는 경우를 따로 생각해야 해서 접근 방법을 초반 콜론 개수 판별로 변경해보았다.