작성일 :

문제 링크

8741번 - 이진수 합

설명

이진수로 나타냈을 때 k자리 이하인 모든 자연수의 합을 이진수로 출력하는 문제입니다.


접근법

1부터 2^k - 1까지의 합은 (2^k - 1) * 2^(k-1)입니다.

이 값을 이진수로 보면, 길이 k의 1이 연속된 뒤 k-1개의 0이 붙은 형태가 됩니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using System.Text;

class Program {
  static void Main() {
    var k = int.Parse(Console.ReadLine()!);

    var sb = new StringBuilder(2 * k - 1);
    sb.Append(new string('1', k));
    if (k > 1) sb.Append(new string('0', k - 1));

    Console.WriteLine(sb.ToString());
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int k; cin >> k;
  string ans;
  ans.reserve(2 * k - 1);
  ans.append(k, '1');
  if (k > 1) ans.append(k - 1, '0');

  cout << ans << "\n";

  return 0;
}