ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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์ด ๋  ๋•Œ๊นŒ์ง€ ์ƒ๋žต๋œ ์ž๋ฆฌ๋ฅผ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค.

     

     

     

     

    ๋Œ“๊ธ€

Designed by Tistory.