Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฐฑ์ค€ 3107 IPv6

Ama_grammer 2025. 4. 8. 18:38

๐Ÿ“–๋ฌธ์ œ

IPv6

โ“๊ตฌ์ƒ

์ด ๋ฌธ์ œ๋Š” ์ถ•์•ฝ๋œ IPv6 ์ฃผ์†Œ๋ฅผ ์›๋ณธ์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

IPv6 ์ฃผ์†Œ๋Š” 32 ์ž๋ฆฌ์˜ 16์ง„์ˆ˜๋ฅผ 4์ž๋ฆฌ์”ฉ ๋Š์–ด ๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ๊ฐ’์„ ์ถ•์•ฝ ์ „์œผ๋กœ ๋Œ๋ฆฌ๋ฉด :(์„ธ๋ฏธ์ฝœ๋ก ) ์€ 7๊ฐœ๊ฐ€ ์กด์žฌํ•ด์•ผํ•˜๊ณ ,

16์ง„์ˆ˜ 4์ž๋ฆฌ ์ˆซ์ž๋Š” ์ด 8๊ฐœ๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค.

๋จผ์ € ์ถ•์•ฝ ์กฐ๊ฑด์„ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. ๊ฐ ๊ทธ๋ฃน์˜ ์•ž์ž๋ฆฌ์˜ 0์˜ ์ „์ฒด ๋˜๋Š” ์ผ๋ถ€๋ฅผ ์ƒ๋žต ํ•  ์ˆ˜ ์žˆ๋‹ค. 
2. ๋งŒ์•ฝ 0์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ทธ๋ฃน์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ทธ ์ค‘ ํ•œ ๊ฐœ ์ด์ƒ ์—ฐ์†๋œ ๊ทธ๋ฃน์„ ํ•˜๋‚˜ ๊ณจ๋ผ ์ฝœ๋ก  2๊ฐœ(::)๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
3. 2๋ฒˆ์งธ ๊ทœ์น™์€ ๋ชจํ˜ธํ•จ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์˜ค์ง ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 2์˜ ๊ฒฝ์šฐ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์ด "::1" ์œผ๋กœ ์ถ•์•ฝ๋˜์ง€ ์•Š์€ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

→ 0000:0000:0000:0000:0000:0000:0000:0001 

์›๋ณธ์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ์–ด๋–ค ๊ณผ์ •์ด ํ•„์š”ํ• ์ง€ ๋ณด๋ฉด

1. ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ์ž…๋ ฅ๊ฐ’์„ split ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
2. ๋ถ„๋ฆฌ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 8์ด ์•„๋‹Œ ๊ฒฝ์šฐ, '8 - ๋ฐฐ์—ด์˜ ๊ธธ์ด' ๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ธฐ์กด ๋ฐฐ์—ด์— unshift ํ•จ์ˆ˜๋กœ '0000' ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
3. ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ๊ฐ์˜ ์š”์†Œ์˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ 4์ž๋ฆฌ์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ  ๋ถ€์กฑํ•œ ๋งŒํผ์„
 '0'.repeat(4 - ์š”์†Œ์˜ ์ž๋ฆฟ์ˆ˜) + ์š”์†Œ ๋ฅผ ํ•ด์ค€๋‹ค.

 

์ฝ”๋“œ.

const ipv6 = require('fs').readFileSync(0, 'utf-8').trim().split(':');
const len = ipv6.length;
if (len !== 8) for (let i = 0; i <= 8 - len; i++) ipv6.unshift('0000');
const result = ipv6.map(e => (e.length !== 4) ? ('0').repeat(4 - e.length) + e : e).join(':')
console.log(result);

 

์ด ์ฝ”๋“œ๋Š” ์œ„์˜ ์ž…๋ ฅ 1๊ณผ 2์— ๋Œ€ํ•œ ์ถœ๋ ฅ์— ๊ด€ํ•ด์„œ๋Š” ํ‹€๋ฆฐ๊ฒƒ์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฌธ์ œ์† ์˜ˆ์ œ "2001:db8:85a3::8a2e:370:7334" ๊ฐ€ ์ž…๋ ฅ ๋˜๋ฉด ์ถœ๋ ฅ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. "0000:2001:0db8:85a3:0000:8a2e:0370:7334"

์ด ๋ฌธ์ œ๋Š” 0์˜ ์ถ•์•ฝ์„ ํ‘œ์‹œํ•œ ์„ธ๋ฏธ์ฝœ๋ก  :: ์˜ ์œ„์น˜๊ฐ€ ์˜ˆ์ œ ์ž…๋ ฅ 2 ์ฒ˜๋Ÿผ ๋งจ ์•ž์ž๋ฆฌ์—๋งŒ ์œ„์น˜ํ•  ๊ฒฝ์šฐ๋งŒ์„ ์ƒ๊ฐํ•ด์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ์กฐ๊ฑด์—์„œ ์„ธ๋ฏธ์ฝœ๋ก ์ด 2๊ฐœ ๋‚˜์˜จ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌํ•  ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

๋˜ํ•œ, 1:2:3:4:5:6:7:: ์˜ ๊ฒฝ์šฐ split ํ•จ์ˆ˜๋กœ ํ‘œํ˜„์‹œ [1, 2, 3, 4, 5, 6, 7, '', ''] ๊ฐ€ ๋˜์–ด ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 9๊ฐ€ ๋˜๊ณ  ๊ธฐ์ค€์ด ๋˜๋Š” 8์„ ์ดˆ๊ณผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

์ฝ”๋“œ.

let ipv6 = require('fs').readFileSync('./input.txt', 'utf-8').trim().split(':');
const len = ipv6.length;
if (len > 8) ipv6 = [...ipv6.slice(0, ipv6.indexOf('')), ...ipv6.slice(ipv6.indexOf('') + 1,)];
if (len !== 8) {
  const prev = ipv6.splice(0, ipv6.indexOf(''));
  for (let i = 0; i < 8 - len; i++) prev.push('');
  ipv6 = [...prev, ...ipv6];
}
const result = ipv6.map(e => (e.length !== 4) ? ('0').repeat(4 - e.length) + e : e).join(':')
console.log(result);

 

๊ธฐ์กด๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ถ•์•ฝ๋œ ์œ„์น˜๋ฅผ indexOf  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ •ํ•˜๊ณ , ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 8์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ถ•์•ฝ๋œ ์œ„์น˜์—์„œ ์ธ๋ฑ์Šค ๊ฐ’์„ ์กฐ์ ˆํ•˜์—ฌ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 8์ด ๋˜๊ฒŒ ์กฐ์ •ํ–ˆ๋‹ค.

 

๐Ÿ”ฅ๋ฐฐ์šด ์ 

์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด, ๊ตฌํ˜„ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ฐ–์€ ๋ฌธ์ œ์˜€๋‹ค. ์ด์ „์—๋Š” ์œ„์™€ ๊ฐ™์ด "6 → 0006" ์„ ๋งŒ๋“ค๋ ค๋ฉด ๊ฐ๊ฐ์„ ๋˜ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ทธ ์•ž์— 0์„ (4 - ๋ฐฐ์—ด์˜ ๊ธธ์ด) ๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๊ณ  join ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ๋งŒ๋“ค์—ˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ๊ฒช์œผ๋ฉด์„œ ์ข€๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์š•์‹ฌ์ด ์„ฑ์žฅ์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ํ‘œ๋ฉด์  ์กฐ๊ฑด์—๋งŒ ์˜์ง€ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณด์ด์ง€ ์•Š๋Š” ์กฐ๊ฑด์„ ํŒŒ์•…ํ•˜๋Š” ๋ถ€๋ถ„์— ์žˆ์–ด ๋ถ€์กฑํ•จ์ด ์žˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ํŠนํžˆ ์ฒ˜์Œ์— ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ์ถœ๋ ฅ๊ฐ’๋งŒ์„ ์ƒ๊ฐํ•˜์—ฌ "์ถ•์•ฝํ˜• ์„ธ๋ฏธ์ฝœ๋ก ์˜ ์œ„์น˜๊ฐ€ ์•ž์— ์žˆ๋‹ค" ๋ผ๊ณ ๋งŒ ์ƒ๊ฐํ•˜์—ฌ unshift ๋ฅผ ์„ ํƒํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” ์ด ์ ์— ์œ ์˜ํ•˜์—ฌ ์ˆจ์€ ์กฐ๊ฑด์„ ์ฐพ์•„๋‚ด๋Š” ๋“ฑ์˜ ์„ธ์‹ฌํ•จ์„ ๊ธธ๋Ÿฌ์•ผ๊ฒ ๋‹ค.