몇 개의 칩이 있다고 가정하면 i번째 칩은 현재 칩[i] 위치에 있습니다. 다음 두 가지 유형의 작업 중 하나를 모든 칩에서 원하는 만큼(0일 수도 있음) 여러 번 수행할 수 있습니다. −
-
i번째 칩을 0의 비용으로 왼쪽 또는 오른쪽으로 2단위 이동합니다.
-
i번째 칩을 비용 1로 왼쪽이나 오른쪽으로 1단위 이동합니다.
처음에는 두 개 이상의 칩이 있을 수 있습니다. 모든 칩을 같은 위치로 옮기는 데 필요한 최소 비용을 반환해야 합니다. 최종 위치는 무엇이든 될 수 있습니다. 따라서 초기 칩의 배열이 [2,2,2,3,3]이면 출력은 2가 됩니다. 네 번째와 다섯 번째 칩은 모두 비용이 1인 위치 2로 이동합니다. 따라서 총 최소 비용은 2
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
홀수 :=0 및 짝수 :=0
-
범위 0에서 배열 길이까지의 i에 대해
-
칩[i]이 홀수이면 홀수를 늘리고, 그렇지 않으면 짝수를 늘립니다.
-
-
홀수와 짝수의 최소값을 반환합니다.
예시(C++)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int minCostToMoveChips(vector<int>& chips) { int odd =0; int even = 0; for(int i =0;i<chips.size();i++){ if(chips[i]&1)odd++; else even++; } return min(odd,even); } }; main(){ Solution ob; vector<int> v1 = {2,2,2,3,3}; cout << ob.minCostToMoveChips(v1); }
입력
[2,2,2,3,3]
출력
2