이번 문제는 배열 문제였다.
이 문제를 풀면서 든 생각은 '속았다' 였다.
나 자신을 나 스스로 속인 건지, 아니면 문제의 의도가 그랬던건지는 모르겠지만...
이 문제를 풀기 위해서 처음에 백트래킹으로 접근했다.
0과 1을 계속 flip 을 구현하여 뒤집으면서 target 과 동일한 string 값이 나올때까지 계속 '완전탐색' 하는 것이다.
하지만 문제를 살짝 가볍게 바라보면 이 문제는 '몇 번' 뒤집었는지 파악하는 'greedy' 문제에 가깝다는 것을 알 수 있다.
000000000 비트값이
001011101 이 되기 위해서
'몇 번' 뒤집었는지 '셀 수' 있는 것이다.
0에서 1이 되기 위해서는 한번 뒤집어야한다. 그리고 1에서 0이 되기위해서도 한번 뒤집어야한다.
해당 flip 을 시뮬레이션해보면 다음과 같다.
001111111
001000000
001011111
001011100
001011101
즉, 연속해서 같은 번호는 건너뛰고 그 전 값과 다른 값이면 뒤집는 횟수를 구할 수 있는 것이다.
코드로 구현하면 다음과 같다.
이때, 첫번째 index = 0 이 1이냐 0이냐에 따라서 시행횟수는 달라진다.
class Solution {
public int minFlips(String target) {
String[] arr = target.split("");
int count = arr[0].equals("0") ? 0 : 1;
for (int i = 1 ; i < arr.length; i++) {
String prev = arr[i-1];
String now = arr[i];
if (!prev.equals(now)) {
count++;
}
}
return count;
}
}
'TIL' 카테고리의 다른 글
[코테연습] 347. Top K Frequent Elements (1) | 2024.06.20 |
---|---|
[코테연습] 451. Sort Characters By Frequency (0) | 2024.06.19 |
[코테연습] 1286. Iterator for Combination (0) | 2024.06.17 |
[코테연습] 1282. Group the People Given the Group Size They Belong To (0) | 2024.06.16 |
[코테연습] 2433. Find The Original Array of Prefix Xor (0) | 2024.06.15 |