11-3. 문자열 뒤집기 Python3

Yelim Kim·2022년 9월 13일
0

Python Algorithm Interview

목록 보기
34/36

Problem

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.

예를 들어 S=0001100 일 때,

전체를 뒤집으면 1110011이 된다.
4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다.
하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다.

문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오.

백준에 문제가 있다.
https://www.acmicpc.net/problem/1439

My code

s = input()
j = -1
count = 0
a = s[0]
tem = s[j]


for i in s:
    tem = s[j]
    if tem == a:
        if i != a:
            count += 1
    j += 1

print(count)

Review


오우... 오래걸렸어요~
처음부터 방향은 정했는데 그걸 실현시키는게 조금 어려웠음
이제 "0의 더미" vs "1의 더미" 개수 비교해서 작은거 출력하자 생각했었는데
생각해보니까 무조건 첫번째숫자를 기준으로 다른 숫자로 바뀌는 순간에만 기록을 하면 가장 최소숫자가 나온다는 걸 깨닳았음.
그래서 그 이후로는 두가지를 생각하진 않았는데
이제 for loop안의 "전의 숫자" 와 "현재 숫자"를 비교하는데 음 지금 생각해보면 비효율적이긴 하지만 변수를 하나 더 사용했다.

그래서 tem(전꺼)와 다르면 count++하는 방식으로 tem을 업데이트 해줬다.
백준에 문제가 있어서 정답을 쉽게 확인했다. 시간이 조금 걸리긴 했지만 한번에 통과되서 행복!

profile
뜬금없지만 세계여행이 꿈입니다.

0개의 댓글