알고리즘/구현
[Python] 백준 3107 IPv6
by JayAlex07
2023. 3. 12.
🧑💻 [Python] 백준 3107 IPv6
Gold 5 - 구현

이 문제는 IPv6를 고려해서, 상황들을 생각해서 코드를 짜면 되는 것이다
특히 ::를 집중적으로 생각해야 한다
:: 만 없었다면 그냥 0만 채우면 되는 문제
- 예)
25:09:1985:aa:091:4846:374:bb 같은 경우 그냥 0025:0009:1985:00aa:0091:4846:0374:00bb으로 바꿔주면 된다
그래서 입력을 먼저 받을 때에 : 기준으로 나눠서 리스트에 넣는다
그리고 그 리스트 안에 있는 요소들을 순회한다
만약 중간에 ::가 있으면, 리스트에는 ''으로 반환되어 있을 것이다
- 리스트 길이가 8이면 그대로 0만 채워 넣으면 된다
- 하지만 리스트 길이가 8이 아니면,
::를 채워 넣어줘야 한다
- 리스트 길이를 8로 맞출때까지
0000을 넣어주면 된다
근데 여기서 ::1, ::, 1:: 상황이 벌어진다
- 위를 리스트로 표현하면
['', '', 1] , ['', '', ''], ['1', '', '']이 된다
- 그냥 진행을 하면, 8개로 안 나눠진다
- 그래서
if IPv6[0] == '': 와 if IPv6[-1] == '':을 통해서 ''을 없애고 시작한다
코드
IPv6 = list(input().split(':'))
answer = []
add_address = 0
if IPv6[0] == '':
IPv6.pop(0)
if IPv6[-1] == '':
IPv6.pop()
if len(IPv6) == 8:
for i in IPv6:
answer.append(i.zfill(4))
elif len(IPv6) > 0:
for index in range(len(IPv6)):
if len(IPv6[index]) != 0:
answer.append(IPv6[index].zfill(4))
else:
while len(IPv6) + add_address <= 8:
answer.append("0000")
add_address += 1
print(':'.join(answer))