address = input().split(':') # 콜론 기준으로 주소를 분리
if address[0] == '': # 맨 첫자리가 공백일 경우 = 콜론일 경우 제거. 중복되지 않기 위함
address = address[1:]
if address[-1] == '': # 끝자리가 공백일 경우 제거. 0이 중복일 경우 ::로 표현되니까 체크해줌
address = address[:-1]
result = ''
for i in address: # 입력된 주소만큼 반복
if i == '': # 빈 문자열이라면 = : = 0000이 생략됨
result += '0000:' * (8-len(address)+1)
# 전체 자리 8 - 받아온 주소 길이 + 1(현재) = 생략된 부분만큼 0000 추가
else:
result += i.zfill(4) + ':' # 4자리에 i를 채우고 빈 부분은 0을 추가
print(result[:-1]) # 맨 끝에 :이 붙으므로 제거
처음엔 좀 헷갈렸지만 그래도 간단하게 정리해본 코드.
콜론 기준으로 주소를 분리해 리스트로 만들어준다. 예제 2와 같은 ::1일 경우, split(':')을 사용하면 ['', '', '1'] 과 같은 형태가 된다. 문제 내용을 보면 0으로만 이루어진 그룹이 있을 경우 한개 이상 연속된 그룹을 골라 콜론 2개로 바꿀 수 있으므로 중복되지 않도록 하나를 제거해준다.
결과를 담을 변수 result를 선언해주고 주소 리스트의 길이만큼 반복문을 돌린다.
만약 i가 빈 문자열이라면 콜론, 즉 0000으로 생략되었다는 의미임으로 0000:을 전체 길이인 8에서 주소의 길이만큼 빼주고 1을 더해준다. 그리고 빈 문자열이 아니라면 .zfill()을 사용해서 0을 붙여준다.
.zfill은 지정한 길이에서 빈만큼 0을 붙여주는 파이썬의 내장함수이다. i.zfill(4)이니까 총 길이 4자리에 i값이 들어가고 빈 곳이 있다면 0으로 채워 25를 0025처럼 만들어준다. 반복문이 끝나면 맨 끝에 콜론이 붙어있으므로 [:-1]을 통해 제거해준다.
https://www.acmicpc.net/problem/3107
3107번: IPv6
첫째 줄에 올바른 IPv6 주소가 주어진다. 이 주소는 최대 39글자이다. 또한, 주소는 숫자 0-9, 알파벳 소문자 a-f, 콜론 :으로만 이루어져 있다.
www.acmicpc.net
'study > Algorithm' 카테고리의 다른 글
[백준] 파이썬 1966번: 프린터 큐 (0) | 2024.04.04 |
---|---|
[백준] 파이썬 9012번: 괄호 (1) | 2024.04.04 |
[백준] 파이썬 2615 : 오목 (0) | 2024.04.02 |
[백준] 파이썬 1244 : 스위치 켜고 끄기 (0) | 2024.04.02 |
[백준] 파이썬 16926번: 배열 돌리기 1 (0) | 2024.04.01 |