레스토랑[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]