백준 IPv6 Node.js 풀이

버건디·2023년 6월 14일
0

백준

목록 보기
58/75

문제 풀이

내 풀이

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim();

let str = input.split(":");

let count = 8;
let answer = [];
let realAnswer = [];

// 공통적으로 answer 배열에 문자열들 담아주기
for (let i = 0; i < str.length; i++) {
  if (str[i] == "") {
    answer.push("");
  } else {
    let strr = str[i].padStart(4, 0);
    count--;

    answer.push(strr);
  }
}


// ::1 나 1:: 이 인풋값일때 
if (
  (answer[0] === "" && answer[1] === "") ||
  (answer[answer.length - 1] === "" && answer[answer.length - 2] === "")
) {
  let reduceCount = 0;

  for (let i = 0; i < answer.length; i++) {
    if (answer[i] === "") {
      reduceCount++;
    } else {
      realAnswer.push(answer[i]);
      reduceCount = 0;
    }

    if (reduceCount === 2) {
      while (count !== 0) {
        realAnswer.push("0000");
        count--;
      }
    }
  }

  console.log(realAnswer.join(":"));
} 
// 25:09:1985:aa::bb 식의 중간에 여러개가 사라지는 인풋값이 들어갔을때 
else {
  for (let i = 0; i < answer.length; i++) {
    if (answer[i] === "") {
      while (count !== 0) {
        realAnswer.push("0000");
        count--;
      }
    } else {
      realAnswer.push(answer[i]);
    }
  }

  console.log(realAnswer.join(":"));
}

여기서 생각해야 할부분은 입력이 ::1 나 1:: 으로 주어졌을시에 answer 배열에 ""이 연속적으로 2개가 담긴다는 것이다.

그렇기 때문에 reduceCount라는 변수를 설정해주고 이것이 2가 된다면 연속적으로 "" 이 2개가 연속적으로 담겼다는 뜻이므로 count 수에 맞게 "0000"을 다 넣어주면 된다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글