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

C++에서 모든 도시와 역 사이의 최대 거리 찾기

<시간/>

컨셉

0에서 N-1까지 번호가 매겨진 주어진 도시 수 N과 역이 위치한 도시와 관련하여 우리의 임무는 도시와 가장 가까운 역 사이의 최대 거리를 결정하는 것입니다. 역이 있는 도시는 임의의 순서로 제공될 수 있습니다.

입력

numOfCities = 6, stations = [2, 4]

출력

2

입력

numOfCities = 6, stations = [4]

출력

4
  • 다음 그림은 6개 도시와 역이 녹색으로 강조 표시된 도시를 포함하는 첫 번째 예를 나타냅니다. 따라서 이 경우 가장 가까운 역에서 가장 먼 도시는 2의 거리에서 0입니다. 따라서 최대 거리는 1입니다.

C++에서 모든 도시와 역 사이의 최대 거리 찾기

  • 두 번째 예에서 가장 가까운 역에서 가장 먼 도시는 0이고 거리가 4입니다. 따라서 최대 거리는 4입니다.

C++에서 모든 도시와 역 사이의 최대 거리 찾기

방법

여기 이 문제에 세 가지 가능한 경우가 있습니다. -

  • 첫 번째 경우는 가장 먼 도시가 두 역 사이에 있을 때를 나타냅니다.

  • 두 번째 경우는 가장 먼 도시가 첫 번째 역의 왼쪽에 있을 때를 나타냅니다.

  • 마지막 경우는 가장 먼 도시가 마지막 역의 오른쪽에 있을 때를 나타냅니다.

위의 문제를 해결하기 위해 다음과 같은 알고리즘이 구현되었습니다 -

  • False를 사용하여 크기가 N(도시 수)인 부울 배열을 초기화합니다. 그런 다음 역이 있는 도시의 값을 True로 표시합니다.

  • 다음으로 변수 dist를 0으로 초기화합니다. 첫 번째 city와 동일한 값으로 다른 variablemaxDist를 초기화해야 합니다(두 번째 경우에 사용).

  • 모든 도시를 하나씩 순회하기 시작합니다.

  • 현재 도시에 스테이션이 있는 경우 최대(dist+1)//2 및 maxDist를 maxDist에 할당하는 것으로 관찰되었습니다(첫 번째 경우에 사용됨). 또한 dist에 0을 할당합니다.

  • 그렇지 않으면 dist를 증가시킵니다.

  • 마지막으로 dist 및 maxDist의 최대값을 반환합니다(세 번째 경우에 사용됨).

예시

// C++ program to calculate the maximum
// distance between any city
// and its nearest station
#include<bits/stdc++.h>
using namespace std;
// Shows function to compute the maximum
// distance between any city and its nearest station
int findMaxDistance(int numOfCities1,int station1[],int N){
   // Used to initialize boolean list
   bool hasStation[numOfCities1 + 1] = {false};
   // Used to assign True to cities containing station
   for (int city1 = 0; city1 < N; city1++){
      hasStation[station1[city1]] = true;
   }
   int dist1 = 0;
   int maxDist1 = INT_MAX;
   for(int i = 0; i < N; i++){
      maxDist1 = min(station1[i],maxDist1);
   }
   for (int city1 = 0; city1 < numOfCities1; city1++){
      if (hasStation[city1] == true){
         maxDist1 = max((dist1 + 1) / 2, maxDist1);
         dist1 = 0;
   }
   else
      dist1 += 1;
   }
   return max(maxDist1, dist1);
}
//Driver code
int main(){
   int numOfCities1 = 6;
   int station1[] = {2,4};
   int N = sizeof(station1)/sizeof(station1[0]);
   cout << "Max Distance:" << findMaxDistance(numOfCities1,
   station1, N);
}

출력

Max Distance:2