[BOJ][๐ŸŸก5][๋ฐฑ์ค€#03107] IPv6

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #3107


๋ฌธ์ œ

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์œผ๋กœ ๋‘๊ฒ ๋‹ค.


  1. ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. arr0์€ ::์œผ๋กœ ์ž…๋ ฅ txt๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ txt์— ::์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ทธ ์•ž๊ณผ ๋’ค๋กœ ์ž๋ฅธ 2๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” list๊ฐ€, ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ ์ž์ฒด๋กœ 1๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” list๊ฐ€ ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ์˜ arr0์˜ ๊ธธ์ด๋ฅผ l0์œผ๋กœ ๋‘”๋‹ค.
  3. ๋งŒ์•ฝ l0์ด 1์ด๋ฉด โ€˜::โ€™์ด ์—†์œผ๋ฏ€๋กœ โ€˜:โ€™๋กœ ์ž๋ฅธ list๋ฅผ pre_ret์œผ๋กœ ๋‘”๋‹ค.
  4. ๋งŒ์•ฝ l0์ด 2๋ผ๋ฉด, โ€˜::โ€™์œผ๋กœ ํ•œ ๋ฒˆ ์ž˜๋ ธ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ, ์•ž๊ณผ ๋’ค๋ฅผ โ€˜:โ€™๋กœ ์ž๋ฅธ ๊ฒƒ์„ ๊ฐ๊ฐ arr1๊ณผ arr2๋กœ ๋‘”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ l1, l2๋กœ ๋‘๊ฒ ๋‹ค.
  5. ๋‘ ๋ฆฌ์ŠคํŠธ ์‚ฌ์ด์—์„œ :: ์†์— ๋ช‡ ๊ฐœ์˜ ์—ฐ์†๋œ โ€˜0โ€™๋“ค์ด ํ•จ์ถ•๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋‹ค๋งŒ ์›์†Œ๋Š” 8๊ฐœ์ด๊ณ , l1๊ณผ l2๋ฅผ ์•Œ๊ธฐ ๋•Œ๋ฌธ์— 8์—์„œ l1๊ณผ l2๋ฅผ ๋บ€ ๊ฒƒ์ด โ€˜0โ€™์˜ ์—ฐ์† ๊ฐœ์ˆ˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
  6. pre_ret์€ arr1, 0๋“ค์˜ ์—ฐ์†, arr2 ์ด๋ฏ€๋กœ ์ด๋ฅผ list spread๋ฅผ ํ™œ์šฉํ•ด pre_ret = [*arr1, *['' for _ in range(8-(l1+l2))], *arr2]๋กœ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๋‹ค์‹œ ๋ฌถ์–ด์ฃผ์—ˆ๋‹ค.
  7. ์ด ํ›„ ์ด๋ ‡๊ฒŒ ์ค€๋น„๋œ pre_ret์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ ์›์†Œ๊ฐ€ 4์ž๋ฆฌ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ โ€˜0โ€™์„ ๋ถ™์—ฌ์ฃผ์–ด ret์— ํ•˜๋‚˜์”ฉ ๋„ฃ๋Š”๋‹ค.
  8. ์ด๋ฅผ โ€˜:โ€™์„ seperation์œผ๋กœ ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ฌถ์€ ๋’ค, ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ