3107번: IPv6
첫째 줄에 올바른 IPv6 주소가 주어진다. 이 주소는 최대 39글자이다. 또한, 주소는 숫자 0-9, 알파벳 소문자 a-f, 콜론 :으로만 이루어져 있다.
www.acmicpc.net
문제
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의 축약되지 않은 형태를 출력한다.
코드
split_ip = input().split(':')
ans = []
second_rule = False
for group in split_ip:
if len(group) == 0:
if not second_rule: # 2번째 규칙 아직 사용X
second_rule = True
for _ in range(9-len(split_ip)):
ans.append("0000")
else:
ans.append("0000")
elif 0 < len(group) <= 4:
ans.append('0'*(4-len(group)) + group)
elif len(group) == 4:
ans.append(group)
print(':'.join(ans))
'문제풀이 > 문자열' 카테고리의 다른 글
[Python/파이썬] 백준 11656번 접미사 배열 (0) | 2024.01.19 |
---|---|
[Python/파이썬] 백준 1283번 단축키 지정 (1) | 2023.12.21 |
[Python/파이썬] 백준 13022번 늑대와 올바른 단어 (1) | 2023.05.12 |
[Python/파이썬] 백준 20210번 파일 탐색기 (0) | 2023.03.28 |
[Python/파이썬] 백준 20437번 문자열 게임 2 (0) | 2023.03.27 |