본문 바로가기

Python/코딩 테스트 해설집

백준 - 1439번 - 뒤집기 [파이썬]

반응형

1. 문제의 출처

 

백준 1439번 뒤집기 문제로 이동하기

 

 

 

 

 

2. 문제의 설명

(1) 문제의 설명

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

예를 들어 S=0001100 일 때,

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

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

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

 

(2) 문제 풀이 접근 방법

 1) 모두 0으로 번호를 바꾸는 경우 계산

 2) 모두 1로 번호를 바꾸는 경우 계산

 

 1)과 2)를 비교해서 최소값을 산출한다. 

 

 

3. 코드 해답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## 데이터의 준비
data = input()
change0 = 0
change1 = 0
 
#첫 번째 수가 0인 경우
if data[0== '0':
    #1로 바꾸는 경우
    change1 += 1
else:
    # 첫번째가 1인데, 0으로 바꾸는 경우
    change0 += 1
    
for i in range(len(data)-1):
    if data[i] != data[i+1]:
        if data[i+1== '1':
            ##0으로 바꾸는 경우
            change0 += 1
        else:
            ## 1로 바꾸는 경우
            change1 += 1
            
print(min(change0, change1))
            
cs

(1) 문제 풀이 과정 자가 피드백

탐욕 알고리즘은 최적의 해를 찾는데 초점이 맞춰지는 문제들입니다. 

 

사실 이 문제가 쉬운 편인데 저는 그렇게 쉽게 풀리지는 않았거든요. 그 이유를 살펴 보니 너무 한 번에 모든 경우의 수를 해결할 수 있는 알고리즘 논리를 찾으려는 우를 범했던 것 같습니다. 

 

탐욕 알고리즘은 사실 모든 케이스에 대해서 제일 좋아보이는 방향으로 흘러가도록 알고리즘을 짜는 것이기 때문에 단순한 경우의 수부터 출발하는 것이 좋은 경우도 있는 것 같습니다. 

 

정답 인증

 

 

 

반응형