자리의 이진수로 표현된 음이 아닌 정수 가 주어진다. 는 정확히 자리로 표현되므로, 제일 앞자리가 일 수도 있다.
예를 들어, 의 값이 십진수로 이고 인 경우, 를 자리 이진수로 표현하면 이 된다.
이 수에 아래 두 가지 연산 중 하나를 골라서 수행하는 것을 번 이상 할 수 있다.
- 에 을 더하고, 그 결과를 으로 나눈 나머지를 에 저장한다.
- 에 를 곱하고, 그 결과를 으로 나눈 나머지를 에 저장한다.
여기서, 는 를 번 곱한 것을 의미한다. 예를 들어, 이고, 이다.
두 연산을 원하는 순서로 진행하여 를 으로 만드는 것이 목표이다. 이때, 필요한 최소 연산의 횟수를 구하는 프로그램을 작성하시오.
입력 형식
첫 줄에 의 이진수 표현의 자릿수 가 주어진다. ()
두 번째 줄에 자리의 이진수로 표현된 수 가 주어진다.
출력 형식
첫 줄에 두 연산을 원하는 순서로 번 이상 수행하여 를 으로 만들 때 필요한 최소 연산의 수를 출력한다.
예제 1
입력
8 01011101
출력
6
예제 2
입력
8 01001100
출력
6
예제 3
입력
10 0011111101
출력
5
예제 설명
예제 1에서, 첫 번째 연산을 번 수행하면 는 자리 이진수로 이 된다. 이후 두 번째 연산을 번 수행하면 는 이 된다. 이 경우가 최소 횟수의 연산을 수행하는 방법이다.
예제 2에서, 두 번째 연산을 번 수행하는 것이 최소 횟수의 연산을 수행하는 방법이다.
예제 3에서, 첫 번째 연산을 번 수행하고 두 번째 연산을 번 수행하여 를 으로 만드는 것이 최소 횟수의 연산을 수행하는 방법이다.
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 15점
종류 2: 32점
종류 3: 53점
추가적인 제한 조건이 없음.
해설
다음과 같은 두 가지 관찰이 필요하다:
- 곱하기 연산을 번 반복하면 를 항상 으로 만들 수 있다.
- 더하기 연산을 먼저 진행하고 곱하기 연산을 뒤에 진행하여 최소 연산의 수를 구할 수 있다.
이상 이하의 모든 에 대해 더하기 연산을 번 진행한 이진수에서 곱하기 연산을 몇번해야 으로 만들 수 있는지 구하여 이 중 가장 적은 연산 횟수가 정답이 된다. 시간복잡도는 이다.