[백준 1439] 뒤집기
split() 함수를 활용해봅시다.
다음과 같은 예시를 먼저 소개하겠습니다.
>>> print('0001100'.split('0'))
['', '', '', '11', '', '']
>>> print('0001100'.split('1'))
['000', '', '00']
split(‘기준문자열’)과 같이 함수의 인자로 어떤 문자열을 입력해주면
그것을 기준으로 문자열을 분리해낸다는 점을 주목합시다.
여기서 이 문제의 핵심은 ‘최소’ 횟수를 출력해야한다는 점입니다.
이를 위해서는 한번 뒤집을 때 최대한 많은 것을 뒤집어야 한다는 것,
즉 최대 크기의 ‘블록’ 단위를 뒤집는다고 생각하면 좋습니다.
(ex> ‘0001100’의 경우 ‘11’이라는 블록 하나만을 뒤집으면 최소 1회로 끝납니다.)
따라서 위에서 언급한 것처럼 split(‘0’)과 split(‘1’)을 각각 시행하고
len(리스트의 길이) - 리스트.count(‘‘)를 통해 빈 문자열들의 개수를 뺀 숫자 블록들의 개수를 세주면
그것이 곧 뒤집어야 하는 횟수를 의미합니다.
(ex> ) [’’, ‘’, ‘’, ‘11’, ‘’, ‘‘]의 경우 0의 관점에서 생각했을 때 ‘11’ 하나만을 뒤집으면 된다는 의미이며,
[‘000’, ‘’, ‘00’]의 경우 1의 관점에서 보았을 때 ‘000’과 ‘00’ 두 개를 뒤집어야 한다는 것을 의미합니다.
즉, 이 둘 중 더 적은 횟수가 최소 횟수가 되는 것입니다.)
0 혹은 1로 split했을 때의 횟수를 각각 구해본 다음, 둘 중 더 작은 수를 답으로 출력하면
그것이 곧 최소 횟수가 됩니다.
문제 : 백준 1439 - 뒤집기