이진 문자열

면접 대비

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

요약
이진 문자열에서 앞에 0이 오지 않고 값이 K 이하가 되도록 최소 개수의 비트를 지우는 문제이다.
난이도

보통10점 중 5점

유형
문자열, 그리디, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

이진 문자열은 0과 1로 이루어진 비어 있지 않은 수열이다. 예를 들어 010110, 1, 11101 등이 있다. Ayu는 앞에 0이 없는 이진 문자열 SS를 좋아한다. Ayu는 계산기로 SS를 십진수 표현으로 바꾸려고 한다.

안타깝게도 Ayu의 계산기는 KK보다 큰 정수를 다룰 수 없고, 그런 정수를 입력하면 고장 난다. 따라서 Ayu는 남은 비트의 순서를 유지하면서 SS에서 0개 이상의 비트를 지워, 그 십진수 표현이 KK 이하가 되도록 만들어야 할 수도 있다. 이때 만들어지는 이진 문자열에도 앞에 0이 없어야 한다.

Ayu의 요구를 만족시키기 위해 SS에서 지워야 하는 비트 수의 최솟값을 구하자.

예를 들어 S=1100101S = 1100101이고 K=13K = 13이라 하자. 11001011100101은 십진수로 101이므로, KK 이하로 만들기 위해 SS에서 여러 비트를 지워야 한다. 3번째, 5번째, 6번째 최상위 비트를 지우면 1100101→11011100101 \rightarrow 1101이 된다. 11011101의 십진수 표현은 13이고, 이는 K=13K = 13 이하이다. 이 예에서 지운 비트는 3개이며, 이것이 최솟값이다. (비트를 2개만 지우면 길이가 5인 이진 문자열이 되는데, 길이가 5인 이진 문자열의 값은 십진수로 적어도 16이다.)

입력

첫 번째 줄에 Ayu의 계산기 한계를 나타내는 정수 KK가 주어진다. (1≤K≤2601 \le K \le 260)

두 번째 줄에 Ayu가 좋아하는 이진 문자열 SS가 주어진다. (1≤∣S∣≤601 \le |S| \le 60)

SS에는 앞에 0이 없다고 가정해도 된다.

출력

SS에서 지워야 하는 비트 수의 최솟값을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    13
    1100101
    
    예상 출력
    3
    
  2. 예제 2

    입력
    13
    1111111
    
    예상 출력
    4