๐๋ฌธ์
โ๊ตฌ์
์ด ๋ฌธ์ ๋ ์ถ์ฝ๋ 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 ๋ฅผ ์ ํํ ๋ฌธ์ ๊ฐ ์์๋ค. ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์ด ์ ์ ์ ์ํ์ฌ ์จ์ ์กฐ๊ฑด์ ์ฐพ์๋ด๋ ๋ฑ์ ์ธ์ฌํจ์ ๊ธธ๋ฌ์ผ๊ฒ ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 15992 1, 2, 3 ๋ํ๊ธฐ 7 (0) | 2025.02.20 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ์ ๋ ฌ(Bubble sort) (1) | 2025.01.09 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 14651 ๊ฑท๋ค๋ณด๋ ์ ์ฒ์ญ ์ผ (Large) (0) | 2025.01.02 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 1904 01ํ์ผ (1) | 2024.12.26 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 1003 ํผ๋ณด๋์น ํจ์ (2) | 2024.12.12 |