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

C++에서 채식주의자 친화적, 가격 및 거리별로 레스토랑 필터링

<시간/>

레스토랑[i]에 [idi, Ratingi, vegan friendly, pricei, distancei]가 있는 일련의 레스토랑이 있다고 가정합니다. 세 개의 필터를 사용하여 레스토랑을 필터링해야 합니다.

  • vegan-friendly 필터는 true(vegan-friendly가 true로 설정된 레스토랑만 포함해야 함) 또는 false(모든 레스토랑을 포함할 수 있음)입니다.

  • maxPrice 필터와 max distance 필터는 각각 우리가 고려해야 할 가격과 거리에 대한 최대값입니다.

필터링 후 가장 높은 등급에서 가장 낮은 등급으로 정렬된 레스토랑 ID 배열을 찾아야 합니다. 같은 등급의 음식점은 id 순으로 내림차순으로 정렬합니다. 단순하게 완전 채식주의자 친화적이고 완전 채식주의자 친화적인 값은 참일 때 1, 거짓일 때 0입니다.

따라서 입력이 레스토랑과 같은 경우 -

[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[ 5,1,1,15,1]], veganFriendly =1, maxPrice =50, maxDistance =10이면 출력은 [3,1,5]가 되고 설명은 아래와 같습니다. -

레스토랑 1 [id=1, 등급=4, veganFriendly=1, 가격=40, 거리=10]

레스토랑 2 [id=2, 등급=8, veganFriendly=0, 가격=50, 거리=5]

레스토랑 3 [id=3, 등급=8, veganFriendly=1, 가격=30, 거리=4]

레스토랑 4 [id=4, 등급=10, veganFriendly=0, 가격=10, 거리=3]

레스토랑 5 [id=5, 등급=1, veganFriendly=1, 가격=15, 거리=1]

veganFriendly =1, maxPrice =50 및 maxDistance =10인 레스토랑을 필터링하면 레스토랑 3, 레스토랑 1 및 레스토랑 5가 있습니다(등급이 내림차순으로 정렬됨).

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • temp, n :=레스토랑 배열의 크기라는 행렬을 정의합니다.

  • 0 ~ n – 1 범위의 i에 대해

    • vf =0 또는 r[i, 2] =vf 및 r[i, 3] <=mp 및 r[i, 4] <=md이면

      • temp에 [r[i, 0], r[i, 1]] 삽입

  • 평점에 따라 레스토랑을 내림차순으로 정렬

  • ret

    라는 배열을 만듭니다.
  • 범위 0에서 온도 크기까지의 i에 대해

    • ret에 temp[i, 0] 삽입

  • 리턴 렛

예시(C++)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   static bool cmp(vector <int> a, vector <int> b){
      if(b[1] != a[1])return a[1] > b[1];
      return a[0] > b[0];
   }
   vector<int>filterRestaurants(vector<vector<int>>& r, int vf, int mp, int md) {
      vector < vector <int> > temp;
      int n = r.size();
      for(int i = 0; i < n; i++){
         if((vf == 0 || r[i][2] == vf) && r[i][3] <= mp && r[i][4] <= md){
            temp.push_back({r[i][0], r[i][1]});
         }
      }
      sort(temp.begin(), temp.end(), cmp);
      vector <int> ret;
      for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i][0]);
         return ret;
   }
};
main(){
   vector<vector<int>> v = {{1,4,1,40,10},{2,8,0,50,5},{3,8,1,30,4},{4,10,0,10,3},{5,1,1,15,1}};
   Solution ob;
   print_vector(ob.filterRestaurants(v, 1, 50, 10));
}

입력

[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]]
1
50
10

출력

[3,1,5]