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

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

부호 있는 이진 전개

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

요약
최대 500자리 십진 정수가 주어질 때 부호 있는 이진 전개 중 0이 아닌 자릿수의 최소 개수를 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 그리디, 수학, 비트 연산
정답자
아직 제출이 없습니다

문제

어떤 정수 nn의 이진 전개란, 다음 세 조건을 모두 만족하는 '자릿수'의 수열 akak−1…a1a0a_k a_{k-1} \ldots a_1 a_0을 말한다.

  1. 각 자릿수 a0,a1,…,aka_0, a_1, \ldots, a_k는 11, 00, −1-1 중 하나이다.
  2. 가장 높은 자리의 자릿수 aka_k는 00이 아니다.
  3. n=ak⋅2k+ak−1⋅2k−1+⋯+a1⋅2+a0n = a_k \cdot 2^k + a_{k-1} \cdot 2^{k-1} + \cdots + a_1 \cdot 2 + a_0.

한 정수는 서로 다른 여러 이진 전개를 가질 수 있다. 이 모든 전개 중에서 00이 아닌 자릿수의 개수가 가장 적은 것을 최적 전개라고 부른다. 예를 들어 −1-1을 편의상 1‾\overline{1}로 나타내면, 1515의 이진 전개에는 10001‾1000\overline{1}, 11111111, 1001‾1100\overline{1}1 등이 있다. 이 가운데 첫 번째 10001‾=16−1=151000\overline{1} = 16 - 1 = 15는 00이 아닌 자릿수가 22개뿐이므로 1515의 최적 전개이다.

주어진 정수 nn에 대해, 그 최적 이진 전개에 들어 있는 00이 아닌 자릿수의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 rr (1≤r≤5001 \le r \le 500)이 주어진다. 둘째 줄에는 rr개의 십진수 자리로 이루어진 정수 nn이 주어진다. nn은 가장 높은 자리부터(즉 일반적인 표기 순서로) 적혀 있으며, 00이 아닌 자릿수로 시작한다.

출력

nn의 최적 이진 전개에 들어 있는 00이 아닌 자릿수의 개수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2
    15
    
    예상 출력
    2
    
  2. 예제 2

    입력
    1
    1
    
    예상 출력
    1