[코테] HackerRank Flipping Bits

Dongmin Lee·2023년 5월 22일
0

코테

목록 보기
8/23

💿 문제

💾 문제 요약

입력 값을 비트 반전해서 반환해라.

💿 풀이

입력 받은 number를 toString 매서드로 이진수 문자열로 변환.
앞에 0을 붙여서 길이 32의 문자열로 만듦.
split+map+join 매서드 체이닝으로 1->0 / 0->1 로 변환.
parseInt로 10진수로 다시 변환하고 리턴.

💾 풀이 코드

"use strict";

const fs = require("fs");

process.stdin.resume();
process.stdin.setEncoding("utf-8");

let inputString = "";
let currentLine = 0;

process.stdin.on("data", function (inputStdin) {
  inputString += inputStdin;
});

process.stdin.on("end", function () {
  inputString = inputString.split("\n");

  main();
});

function readLine() {
  return inputString[currentLine++];
}

/*
 * Complete the 'flippingBits' function below.
 *
 * The function is expected to return a LONG_INTEGER.
 * The function accepts LONG_INTEGER n as parameter.
 */

function flippingBits(n) {
  let binStr = n.toString(2);

  while (binStr.length < 32) {
    binStr = "0" + binStr;
  }

  const comStr = binStr
    .split("")
    .map((bit) => (bit === "1" ? "0" : "1"))
    .join("");

  const comInt = parseInt(comStr, 2);

  return comInt;
}

function main() {
  const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

  const q = parseInt(readLine().trim(), 10);

  for (let qItr = 0; qItr < q; qItr++) {
    const n = parseInt(readLine().trim(), 10);

    const result = flippingBits(n);

    ws.write(result + "\n");
  }

  ws.end();
}

💿 리마인더

profile
어제보다 성장하기

0개의 댓글