Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 칩으로 플레이


몇 개의 칩이 있다고 가정하면 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