소 번호표

면접 대비

시간 제한1초메모리 제한128 MB

요약
1의 개수가 정확히 K개이고 앞에 0이 붙지 않는 이진수 중 N번째로 작은 수를 찾아 이진수로 출력한다.
난이도

보통10점 중 5점

유형
조합론, 수학, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

컴퓨터광인 농부 존은 자신의 모든 소에게 이진수로 된 이름표를 붙인다. 존은 다소 미신을 믿어서 정확히 KK개의 1비트를 가진 이진수만 사용한다 (1≤K≤101 \le K \le 10). 이진수이므로 이름표의 최상위 비트는 항상 11이다(앞자리에 00이 붙지 않는다).

존은 가장 작은 이름표부터 시작해 숫자 크기가 커지는 순서대로 이름표를 붙인다. 가장 작은 이름표는 모든 비트가 11인 KK비트 수이다. 존은 어디까지 붙였는지 잊어버렸으니, NN번째로 붙이는 이름표를 구하여라 (1≤N≤1071 \le N \le 10^7).

입력

첫째 줄에 공백으로 구분된 두 정수 NN과 KK가 주어진다.

출력

NN번째 이름표를 이진법으로 한 줄에 출력한다. 즉 문자 0과 1로 이루어진, 앞자리 00이 없는 문자열을 출력한다.

힌트

정확히 세 개의 11비트를 가진 이진수를 작은 순서대로 나열하면 111,1011,1101,1110,10011,10101,10110,…111, 1011, 1101, 1110, 10011, 10101, 10110, \dots 이다. 이 중 77번째 수는 1011010110이다.

예제6

  1. 예제 1

    입력
    7 3
    
    예상 출력
    10110
    
  2. 예제 2

    입력
    1 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 3
    
    예상 출력
    111
    
  4. 예제 4

    입력
    1 10
    
    예상 출력
    1111111111
    
  5. 예제 5

    입력
    4 3
    
    예상 출력
    1110
    
  6. 예제 6

    입력
    5 2
    
    예상 출력
    1010