이진수 합

문제

언어

  • JavaScript

순서도

  1. 하나씩 나열해보며, 규칙 찾기
  2. 규칙대로 구현하기

문제 풀이 step 1

  • 이진수로 나타냈을 때, k 자리 이하인 모든 자연수의 합을 구하는 문제입니다.
  • k 의 범위가 상당히 큽니다. 그래서 k 자리 이하인 모든 자연수의 합을 구하면 그 수도 엄청 커지게 되서 덧셈으로는 구하기 무리가 있어 보입니다.
  • 그렇다면 진리의 하나씩 나열해보기 방법을 사용합니다.
    • k = 1
      • 1 (1)
    • k = 2
      • 110 (6)
    • k = 3
      • 11100 (28)
    • k = 4
      • 1111000 (120)
  • 하나씩 나열해보니 규칙이 보입니다.
  • k 자리 이하인 모든 자연수의 합은 n 개의 1 과 n - 1 개의 0 으로 이루어져있습니다.
  • 이렇게 찾은 규칙대로 합을 구하면 정답입니다.
  • 추가 설명은 주석으로 작성하겠습니다.

후기

  • 역시, 어떻게 풀어야 할 지 모르겠으면, 하나씩 나열해보기 방법이 진리인것 같습니다.

소스 코드

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

const solution = (input) => {
	const n = Number(input[0]);

	let res = "";
	// n 개의 1
	for (let i = 0; i < n; i++) res += "1";
	// n - 1 개의 0
	for (let i = 0; i < n - 1; i++) res += "0";

	return res;
};

console.log(solution(input));