바이너리 문자열이 있다고 가정합니다. 다음 작업을 몇 번이든 적용할 수 있습니다. −
-
숫자에 하위 문자열 "00"이 포함되어 있으면 "10"으로 바꿀 수 있습니다.
-
숫자에 하위 문자열 "10"이 포함되어 있으면 "01"로 바꿀 수 있습니다.
그런 다음 우리는 연산 횟수에 관계없이 얻을 수 있는 최대 바이너리(숫자 값 기반) 문자열을 찾아야 합니다.
따라서 입력이 s ="001100"과 같으면 출력은 111011이 됩니다. 왜냐하면 (00)1100 -> 101(10)0 -> 1010(10) -> 10(10)01 -> 100(10)1 -> 1(00)011 -> 111011.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 길이 :=s의 크기
- 0 :=s의 0 개수
- 0 <2이면
- 반환
- s :=s의 왼쪽에서 모든 '1' 제거
- lead_ones :=길이 - s의 크기
- leading_ones :=leading_ones + 0 - 1
- trailing_ones :=길이 -leading_ones - 1
- answer_left :=1의 선행_일 수
- answer_right :=후행_1의 수
- answer_left 연결 0 answer_right 연결 및 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s): length = len(s) zeros = s.count('0') if zeros < 2: return s s = s.lstrip('1') leading_ones = length - len(s) leading_ones += zeros - 1 trailing_ones = length - leading_ones - 1 answer_left = '1' * leading_ones answer_right = '1' * trailing_ones return ''.join([answer_left, '0', answer_right]) s = "001100" print(solve(s))
입력
"001100"
출력
111011