(백준) 1439번: 뒤집기 파이썬 풀이 (초간단)
<포스팅 요약>
1. 문제풀러가기
https://www.acmicpc.net/problem/1439
1439번: 뒤집기
다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모
www.acmicpc.net
문제 해석:
- 숫자를 뒤집는 최소 횟수 출력하기
예 )
1110000001 일때,
- 1을 0 으로 뒤집을 경우
1번째 행동 : 1110000001 => 0000000001
2번째 행동 : 0000000001 => 0000000000
총 2번의 행동 필요
- 0을 1로 뒤집을 경우
1번째 행동 : 1110000001 => 1111111111
총 1번의 행동 필요
결과:
최소 행동은 1이므로 1출력.
2. 문제 해결 코드
코드 (성공)
import sys
input = sys.stdin.readline
string = str(input())
arr_1 = string.split("1")
arr_0 = string.split("0")
res_1 = 0
res_0 = 0
for i in arr_1:
if "0" in i:
res_1 += 1
for i in arr_0:
if "1" in i:
res_0 += 1
print(min(res_1, res_0))
3. 로직분석
간단한 문제인데, 위 코드는 초보자들이 접근하기 쉬운 코드라고 생각한다. (내가 초보자니까..!!)
1) split을 사용하여 비교
"0"으로 끊었을때 만들어지는 배열과
"1"로 끊었을때 만들어지는 배열을 비교한다.
예)"111001111"일 경우
"0"으로 끊으면 ['111', '', '1111']
"1"로 끊으면 ['', '', '', '00', '', '', '', '']을 출력한다.
2) for문을 사용하여 횟수 카운트
"0"으로 끊었을때 1이 들어있는 원소의 개수를 구한다. => 2개
"1"로 끊었을때 0이 들어있는 원소의 개수를 구한다. =>1개
3) 최소 횟수 출력
2 > 1 이므로 1출력
+++ 추가 ) 다른분들이 짠 코드를 봤는데 ,
for문 하나만 이용해서 숫자가 변경되면 cnt+=1을 해주고 최종적으로 (cnt+1)//2를 해주는 로직을 사용하였다.
내가 짠코드보다 효율적인방법이다..!! 배우고 갑니다~!!!
