아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

비트 왕국

면접 대비

시간 제한8초메모리 제한512 MB

요약
N과 M이 주어질 때, 1의 개수로 먼저 정렬하고 같은 개수에서는 사전순으로 정렬한 순위에서 M번째로 낮은 계급의 길이 N 이진 문자열을 구한다.
난이도

보통10점 중 5점

유형
조합론, 이분 탐색, 수학, 구현
정답자
아직 제출이 없습니다

문제

우주 어딘가에 있는 비트 왕국에는 정확히 2N2^N명의 시민이 살고 있고, 각 시민은 사회에서의 계급을 나타내는 고유한 식별 문자열을 가진다. 식별 문자열은 '0' 또는 '1'로 이루어진 길이 NN의 이진 문자열이다. 시민 사이의 계급 순서는 다음 기준으로 정해진다.

  1. 1의 개수가 더 많은 문자열로 식별되는 시민의 계급이 더 높다. 예를 들어 "011"은 "100"보다 높은 계급이다.
  2. 1의 개수가 같은 문자열을 가진 시민끼리는 사전순으로 더 큰 식별 문자열을 가진 시민의 계급이 더 높다. 예를 들어 "110"은 "101"보다 높은 계급이다.

예를 들어 N=3N = 3이면 이 나라에는 8(=23)8 (= 2^3)명이 살고, 그들의 식별 문자열은 (가장 낮은 계급에서 가장 높은 계급 순으로) "000", "001", "010", "100", "011", "101", "110", "111"이다.

두 수 NN (1≤N≤601 \le N \le 60)과 MM (1≤M≤2N1 \le M \le 2^N)이 주어질 때, 2N2^N명의 시민 중 MM번째로 낮은 계급인 사람의 식별 문자열을 구하려고 한다. 이 문제를 해결하는 프로그램을 작성할 수 있는가?

입력

입력은 여러 개의 데이터셋으로 이루어진다.

각 데이터셋은 두 정수 NN과 MM이 이 순서대로 하나의 공백으로 구분되어 들어 있는 한 줄로 이루어진다. 입력에는 앞뒤 공백 같은 다른 여분의 문자는 없다.

입력의 끝은 두 개의 0이 들어 있는 줄로 나타낸다. 이 줄은 어떤 데이터셋에도 속하지 않는다.

출력

각 데이터셋마다 MM번째로 낮은 계급인 사람의 식별 문자열을 한 줄에 출력한다. 답에서 앞에 오는 0을 하나도 생략해서는 안 된다.

예제1

  1. 예제 1

    입력
    3 3
    3 5
    0 0
    
    예상 출력
    010
    011