Home 문자열 뒤집기 그리드
Post
Cancel

문자열 뒤집기 그리드

0과 1로민 이루어진 문자열 S를 가지고 있습니다. 이 문자열 S에 있는 모든 숫자를 같게 만들려고 합니다. 행동은 연속된 하나이상의 숫자를 잡고 모두 뒤집는 것입니다. 1을 0으로 0을 1로 바꾸는 것을 의미 합니다. 예시 S = 0001100

  1. 전체를 뒤집기 1110011
  2. 4,5문자열을 뒤집으면 1111111 최소한으로 뒤집기 위해 필요한 수는?

처음에는 앞에서 부터 순서대로 집합으로 구분을 할까 했었는데 생각보다 코드를 짜기가 어려웠다.

그래서 결국 전부를 0으로 바꾸는 것과 1로 바꾸는 것 중에서 어느 것을 선택할지 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
data = input()
count0 = 0
count1 = 1
#전부 0 또는 1로 바꾸는 경우를 계산하기 위함

if data[0]=='1':
    count0 += 1
else:
    count1 += 1
    
#두번째 원소부터 모든 원소를 확인하며
for i in range(len(data)-1):
    if data[i] != data[i+1]:
        #다음 수에서 1로 바뀌는 경우
        if data[i+1] == '1':
            count0 += 1
        #다음 수에서 0으로 바뀌는 경우
        else:
            count1 += 1

print(min(count0,count1))
1
2
3
4
if data[0]=='1':
    count0 += 1
else:
    count1 += 1

일단 문자열의 첫 시작이 1이라면 결국 0으로 바꾸기 위해서는 1회가 필요하고 반대도 마찬가지다.

1
2
3
4
5
6
7
8
9
#두번째 원소부터 모든 원소를 확인하며
for i in range(len(data)-1):
    if data[i] != data[i+1]:
        #다음 수에서 1로 바뀌는 경우
        if data[i+1] == '1':
            count0 += 1
        #다음 수에서 0으로 바뀌는 경우
        else:
            count1 += 1

첫번째 원소는 이미 확인을 했다. 두번째 원소부터 보자

그리고 두수를 비교 했을때 같지 않을 경우 당연히 1로 바뀌거나 0으로 바뀌는 경우다.

1로 바뀌는 경우에는 0으로 바꾸는 횟수를

else인 0으로 바뀌는 경우에는 1로 바꾸는 횟수를 추가한다.

그리고 이 둘중에서 최소인 것을 출력

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.