본문 바로가기
알고리즘/구현

[Python] 백준 3107 IPv6

by JayAlex07 2023. 3. 12.

🧑‍💻 [Python] 백준 3107 IPv6

Gold 5 - 구현

img

이 문제는 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))

'알고리즘 > 구현' 카테고리의 다른 글

[Python] 백준 15683 감시  (0) 2023.03.20
[Python] 백준 14719 빗물  (0) 2023.03.15
[Python] 백준 15686 치킨 배  (0) 2023.03.14
[Python] 백준 14502 연구소  (0) 2023.03.14
[Python] 백준 1913 달팽이  (0) 2023.03.04