
이진 배열 nums가 주어집니다. (배열의 요소가 0 혹은 1로만 구성)
배열에서 다음 작업을 여러 번(최소 0회) 수행할 수 있습니다:
nums의 모든 요소를 1로 만드는 데 필요한 최소 연산 수를 반환합니다. 불가능한 경우 -1을 반환합니다.
인덱스 0, 1, 2의 요소를 선택합니다. 결과 배열은 숫자 = [1, 0, 0, 1, 0, 0]입니다.
인덱스 1, 2, 3의 요소를 선택합니다. 결과 배열은 숫자 = [1, 1, 1, 0, 0, 0]입니다.
인덱스 3, 4, 5의 요소를 선택합니다. 결과 배열은 숫자 = [1, 1, 1, 1, 1, 1]입니다.
3 <= nums.length <= 105
0 <= nums[i] <= 1
i번째 요소를 찾으면 i + 2번째 요소가 존재하는지 확인한 후 연속된 3개의 비트를 뒤집는다.^) 연산을 통해 비트 뒤집기를 구현.class Solution {
public int minOperations(int[] nums) {
int flip = 0;
int numsCheck = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0 && i + 2 <= nums.length - 1) {
nums[i] = nums[i] ^ 1;
nums[i + 1] = nums[i + 1] ^ 1;
nums[i + 2] = nums[i + 2] ^ 1;
flip++;
}
if (nums[i] == 1)
numsCheck++;
}
if (numsCheck == nums.length)
return flip;
return -1;
}
}