Dyzio
시간 제한1초메모리 제한128 MB
0과 1로 주어진 재귀적 반씩 자르기 설명을 해석해, 가장 짧은 조각이 처음 나오는 시점의 자른 횟수를 구한다.
문제
디지오(Dyzio)는 야셱(Jasiek)의 친구이고, 야셱처럼 수수께끼를 좋아합니다. 디지오가 야셱에게 낸 수수께끼는 다음과 같습니다.
야셱아, 여기 밧줄이 하나 있어. 이 밧줄을 여러 조각으로 잘라야 해. 어떻게 자르는지 직접 알려 주지는 않을게. 대신 0과 1로 이루어진 수열을 줄 테니, 앞에서부터 읽으면서 다음 규칙대로 자르면 돼.
- 지금 보고 있는 조각의 설명이 1로 시작하면, 그 조각을 정확히 반으로 자른다. 이 1 바로 뒤에는 (같은 규칙을 그대로 적용해서) 왼쪽 조각을 어떻게 할지 적어 두었고, 그 설명이 끝난 다음에 이어서 오른쪽 조각을 어떻게 할지 적어 두었다.
- 지금 보고 있는 조각의 설명이 0이면, 그 0 한 글자가 그 조각에 대한 설명 전부이며 "자르지 않고 그대로 둔다"는 뜻이다. 특히 수열 전체가 0 한 글자뿐이라면 밧줄을 통째로 남겨 둔다.
- 반드시 왼쪽 조각을 모두 자른 뒤에야 오른쪽 조각을 자르기 시작할 수 있다.
밧줄은 처음에 하나의 조각입니다. 한 번 자를 때마다 조각은 똑같은 길이의 두 조각으로 나뉘므로, 어떤 조각의 길이는 그 조각이 몇 번 잘렸는지에만 달려 있습니다. 자르는 순서는 수열이 정한 순서(언제나 왼쪽이 먼저)를 따릅니다.
(처음으로 나오는) 가장 짧은 조각을 얻으려면 최소 몇 번 잘라야 하는지 구하세요.
다음을 수행하는 프로그램을 작성하세요.
- 표준 입력에서 밧줄을 자르는 방법의 설명을 읽는다.
- (처음으로 나오는) 가장 짧은 조각을 얻는 데 필요한 최소 자르기 횟수를 계산한다.
- 그 결과를 표준 출력에 출력한다.
입력
첫째 줄에 정수 이 주어진다 (). 둘째 줄에는 길이가 이고 0과 1로만 이루어진 문자열(사이에 공백 없음)이 주어지며, 이는 디지오가 준 밧줄 자르기 설명이다.
출력
(처음으로 나오는) 가장 짧은 조각을 얻는 데 필요한 최소 자르기 횟수를 나타내는 정수 하나를 한 줄에 출력한다.