1. 문제 요약
/*
* 문제 : 0과 1로 이뤄진 문자열에서 전부 0 또는 1로 바꾸는 상황
* 조건
- 0이나 1 둘중 하나로만 이뤄진 문자열로 변환
- 뒤집기 연산도 0 또는 1 둘 중 하나로 수행됨
- 문자열 길이는 100만이 최대
* 출력 : 뒤집은 횟수 출력
*/
2. 풀이
(1) 0 또는 1로 이뤄진 집합 개수가 몇 개냐
순차 순회를 하면서, 연속적으로 나타나면 카운트 수를 늘리지 않음. "0->1, 1->0으로 변환된 지점 수를 셈"
(2) 변수 inver_last 역할
문자열 마지막 지점에 이전과 다른 값 하나가 나올 경우 카운트가 하나 덜 이뤄지는 문제점.
그래서 마지막 지점과 inverse 지점이 하나 더 있는 것으로 알려줌.
3. 다른 사람의 잘난 코드
(1) "달라지는 구간 개수/2 이 답이다."
첫 카운트 = 1부터 시작하면서 수를 세아려감.
4. 코드
https://github.com/ukiKwon/algorithm-study/blob/master/%EB%92%A4%EC%A7%91%EA%B8%B0/1439.cpp
'공부 > 오늘의 코딩' 카테고리의 다른 글
[우선순위큐] 프로그래머스 디스크 컨트롤러 (0) | 2021.12.07 |
---|---|
[검색 알고리즘] 띄어쓰기 포함된 문자 (0) | 2020.06.15 |
[뒤집기] 1455번, 최소 뒤집기 구하기(1) (0) | 2020.05.19 |
[백준1285] 뒤집기(1) (0) | 2020.05.16 |
[문자열 처리] 1764번, 단어간 중복을 찾아라 (0) | 2020.04.19 |