-
[Python] ๋ฐฑ์ค 3107 IPv6 (String)๐ป Algorithm/Python 2022. 7. 8. 23:37
๐ ๋ฌธ์
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
์์ ์ถ๋ ฅ 1
0025:0009:1985:00aa:0091:4846:0374:00bb
์์ ์ ๋ ฅ 2
::1
์์ ์ถ๋ ฅ 2
0000:0000:0000:0000:0000:0000:0000:0001
๐ ํ์ด
๐ฌ Code
adr = list(input().split(':')) if adr.count(''): while len(adr) > 8: del adr[adr.index('')] while len(adr) < 8: adr.insert(adr.index(''), '0000') for i in range(8): if len(adr[i]) < 4: adr[i] = '0'*(4-len(adr[i])) + adr[i] print(*adr, sep=':')
๐ก Solution
์์ด๋์ด๋ ์ด๋ ์ต๋๋ค.
์ฝ๋ก ์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์๋ฅผ ๋๋ ์ ๋ฆฌ์คํธ adr์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ adr์ ์์ 8๊ฐ๋ฅผ ํ๋์ฉ ์ฒดํฌํ๋ฉด์ ๊ธธ์ด๊ฐ 4๋ณด๋ค ์์ ์์์ ์์ 0์ผ๋ก ์ฑ์์ค ๊ธธ์ด๊ฐ 4๊ฐ ๋๊ฒ ๋ง๋ญ๋๋ค. ์ฒซ๋ฒ์งธ ๊ท์น์ ์ด๋ ๊ฒ ํด๋ฆฌ์ด~!
for i in range(8): if len(adr[i]) < 4: adr[i] = '0'*(4-len(adr[i])) + adr[i]
๋๋ฒ์งธ ๊ท์น ํด๋ฆฌ์ด๋ฅผ ์ํด ์๋ต๋ 0๊ทธ๋ฃน์ ๋ณต์์์ผ์ฃผ๊ฒ ์ต๋๋ค.
๐ธ ์๋ต๋ 0 ๊ทธ๋ฃน์ด ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ
# input ::1 (์๋ ํํ 0000:0000:0000:0000:0000:0000:0001) print(adr) # ['', '', '1']
์ด๋ ๊ฒ adr ๊ธธ์ด๊ฐ 8๋ณด๋ค ์์ ์๋ฐ์ ์์ต๋๋ค.
if adr.count(''): while len(adr) < 8: adr.insert(adr.index(''), '0000')
๋ฐ๋ผ์ adr ๊ธธ์ด๊ฐ 8์ด ๋ ๋๊น์ง ์๋ต๋ ์๋ฆฌ์ 0000์ ์ฝ์ ํด์ค๋๋ค.
๐ธ ์๋ต๋ 0 ๊ทธ๋ฃน์ด ํ๋์ธ ๊ฒฝ์ฐ
# input 1:2::3:4:5:6:7 (์๋ ํํ 0001:0002:0000:0003:0004:0005:0006:0007) print(adr) # ['', '1', '2', '3', '4', '5', '6', '7']
adr ๊ธธ์ด 8 → ๋ฌธ์ ์์
# input ::1:2:3:4:5:6:7 (์๋ ํํ 0000:0001:0002:0003:0004:0005:0006:0007) print(adr) # ['', '', '1', '2', '3', '4', '5', '6', '7']
adr ๊ธธ์ด 9 → ๋ฌธ์ ์. ์๋ง ์ค๋ตํ์ ๋ฐ์๋ค๋ฉด ์ด๋ ๊ฒ 0๊ทธ๋ฃน ํ๋๊ฐ ์ฃผ์์ ์ฒ์ ๋๋ ๋์์ ์๋ต๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ ค ์ํด์คฌ์ ํ๋ฅ ์ด ๋์ต๋๋ค. ์ ๋ ์ ๋๋ฌธ์ ์ฝ์ง์ ๊ฝค๋ ํ์ต๋๋ค ^_ใ
if adr.count(''): while len(adr) > 8: del adr[adr.index('')]
๋ฐ๋ผ์ adr ๊ธธ์ด๊ฐ 8์ด ๋ ๋๊น์ง ์๋ต๋ ์๋ฆฌ๋ฅผ ์ญ์ ํด์ค๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (Dijkstra) (0) 2022.07.08 [Python] ๋ฐฑ์ค 11000 ๊ฐ์์ค ๋ฐฐ์ (Heapq) (0) 2022.07.08 [Python] ๋ฐฑ์ค 13022 ๋๋์ ์ฌ๋ฐ๋ฅธ ๋จ์ด (String) (0) 2022.07.08 [Python] ๋ฐฑ์ค 7576 ํ ๋งํ (BFS) (0) 2022.07.08 [Python] ๋ฐฑ์ค 16719 ZOAC (๊ตฌํ) (0) 2022.07.08