알고리즘/구현
[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))