본문 바로가기
알고리즘/그리디 알고리즘

1439 뒤집기

by tryotto 2019. 6. 28.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <algorithm>
 
using namespace std;
 
char arr[1000005= { 0 };
int num[1000005];
 
int main() {
    scanf("%s"&arr);
 
    int len = 0;
    for (int i = 0; i < 1000005; i++) {
        if (arr[i] == 0)
            break;
 
        num[i] = (int)(arr[i] - '0');
 
        len++;
    }
 
    // 0으로 만들기
    int flag = 0, oneN = 0;
    for (int i = 0; i < len; i++) {
        if (num[i] == 0) {
            if (flag == 1) {
                flag = 0;
                oneN++;
            }
        }
        else {
            if (flag == 0) {
                flag = 1;
            }
        }
    }
    if (flag == 1) {
        flag = 0;
        oneN++;
    }
 
    // 1 로 만들기
    flag = 1;
    int zeroN = 0;
    for (int i = 0; i < len; i++) {
        if (num[i] == 1) {
            if (flag == 0) {
                flag = 1;
                zeroN++;
            }
        }
        else {
            if (flag == 1) {
                flag = 0;
            }
        }
    }
    if (flag == 0) {
        flag = 1;
        zeroN++;
    }
 
    printf("%d", min(oneN,zeroN));
}
cs


'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글

2816 디지털 티비  (0) 2019.06.28
12018 yonsei toto  (0) 2019.06.28
1507 궁금한 민호  (0) 2019.06.27
1343 폴리노미오  (0) 2019.06.27
1783 병든 나이트  (0) 2019.06.27