[BOJ][๐ก5][๋ฐฑ์ค#03107] IPv6
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
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์ ์ถ์ฝ๋์ง ์์ ํํ๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
25:09:1985:aa:091:4846:374:bb
์ถ๋ ฅ
0025:0009:1985:00aa:0091:4846:0374:00bb
์์ 2
์ ๋ ฅ
::1
์ถ๋ ฅ
0000:0000:0000:0000:0000:0000:0000:0001
My Sol
txt = input()
arr0 = txt.split('::')
l0 = len(arr0)
if l0==1:
pre_ret = arr0[0].split(':')
else:
arr1 = arr0[0].split(':')
arr2 = arr0[1].split(':')
l1, l2 = len(arr1), len(arr2)
pre_ret = [*arr1, *['' for _ in range(8-(l1+l2))], *arr2]
ret = []
for p in pre_ret:
pl = len(p)
ret.append('0'*(4-pl)+p)
print(':'.join(ret))
์๊ฐ๋ณด๋ค ๊ต์ฅํ ์ฝ๊ฒ ํ์ด๋๋ ๋ฌธ์ ์๋ค. ์ฐ์ ::
์ ์ ๋ฌด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ฌธ์ ์ ์ ๊ทผํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ด ์ฐ์ ์ด๋ค. ๋ํ 8๊ฐ ์์๋ก ๊ตฌ๋ถ๋ ์ ์๋ค๋ ์ฌ์ค์ ์ธ์งํ๊ณ , ๋ง์ง๋ง์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ์ด์ ์ 8๊ฐ ์์์ ๋ฆฌ์คํธ ๊ฐ๊ฐ์ ์์ ๊ธธ์ด๊ฐ 4๊ฐ ๋ ๋๊น์ง ์์ ์์ โ0โ์ ๋ถ์ฌ์ค๋ค๊ณ ์๊ฐํ๋ค.
์ฆ, 1์ฐจ์ ์ธ ๋ชฉํ๋ 8๊ฐ ์์๋ฅผ ๊ฐ์ง ๊ฐ๊ฐ์ โ0โ์ ๋ถ์ด๊ธฐ ์ด์ ์ ์์๋ฅผ ๋ด์ ๋ฆฌ์คํธ์ด๋ค. ์ด๋ฅผ pre_ret
์ผ๋ก ๋๊ฒ ๋ค.
- ์ ๋ ฅ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ค.
arr0
์::
์ผ๋ก ์ ๋ ฅtxt
๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์ด๋ค. ๋ง์ฝtxt
์::
์ด ํฌํจ๋์ด ์๋ค๋ฉด ๊ทธ ์๊ณผ ๋ค๋ก ์๋ฅธ 2๊ฐ์ ์์๋ฅผ ๊ฐ์ง๋ list๊ฐ, ์๋๋ผ๋ฉด ๊ทธ ์์ฒด๋ก 1๊ฐ์ ์์๋ฅผ ๊ฐ์ง๋ list๊ฐ ๋์์ ๊ฒ์ด๋ค. ์ด๋์arr0
์ ๊ธธ์ด๋ฅผl0
์ผ๋ก ๋๋ค.- ๋ง์ฝ l0์ด 1์ด๋ฉด โ::โ์ด ์์ผ๋ฏ๋ก โ:โ๋ก ์๋ฅธ list๋ฅผ
pre_ret
์ผ๋ก ๋๋ค. - ๋ง์ฝ l0์ด 2๋ผ๋ฉด, โ::โ์ผ๋ก ํ ๋ฒ ์๋ ธ๋ค๋ ๋ป์ด๋ฏ๋ก, ์๊ณผ ๋ค๋ฅผ โ:โ๋ก ์๋ฅธ ๊ฒ์ ๊ฐ๊ฐ
arr1
๊ณผarr2
๋ก ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผl1
,l2
๋ก ๋๊ฒ ๋ค. - ๋ ๋ฆฌ์คํธ ์ฌ์ด์์
::
์์ ๋ช ๊ฐ์ ์ฐ์๋ โ0โ๋ค์ด ํจ์ถ๋์ด ์๋์ง ์ ์ ์๋ค. ๋ค๋ง ์์๋ 8๊ฐ์ด๊ณ ,l1
๊ณผl2
๋ฅผ ์๊ธฐ ๋๋ฌธ์ 8์์l1
๊ณผl2
๋ฅผ ๋บ ๊ฒ์ด โ0โ์ ์ฐ์ ๊ฐ์์์ ์ ์ ์๊ฒ ๋ค. pre_ret
์arr1
,0๋ค์ ์ฐ์
,arr2
์ด๋ฏ๋ก ์ด๋ฅผ list spread๋ฅผ ํ์ฉํดpre_ret = [*arr1, *['' for _ in range(8-(l1+l2))], *arr2]
๋ก ํ๋์ ๋ฆฌ์คํธ๋ก ๋ค์ ๋ฌถ์ด์ฃผ์๋ค.- ์ด ํ ์ด๋ ๊ฒ ์ค๋น๋
pre_ret
์ผ๋ก๋ถํฐ ๊ฐ ์์๊ฐ 4์๋ฆฌ๊ฐ ๋ ๋๊น์ง โ0โ์ ๋ถ์ฌ์ฃผ์ดret
์ ํ๋์ฉ ๋ฃ๋๋ค. - ์ด๋ฅผ โ:โ์ seperation์ผ๋ก ํ์ฌ ํ๋์ ๋ฌธ์์ด๋ก ๋ฌถ์ ๋ค, ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ