Implement the method computeDayGains(nbSeats, payingGuests, guestMovements)

LaMagie_37300 Posted messages 5 Status Member -  
KX Posted messages 19031 Status Moderator -
Votre solution actuelle ne prend pas en compte la logique de gestion des arrivées et des départs des touristes, ainsi que le nombre de places disponibles au restaurant. Pour calculer les gains de la journée, vous devez suivre l'état des sièges et des paiements des touristes.

Voici une approche que vous pouvez adopter :

1. Utilisez un ensemble pour suivre les touristes actuellement dans le restaurant.
2. Parcourez le tableau `guestMovements`, en vérifiant si un touriste arrive ou part.
3. Si un touriste arrive, vérifiez s'il y a une place disponible. S'il y a une place, ajoutez son paiement au total. Si ce n'est pas le cas, il doit attendre ou partir.
4. Si un touriste part, levez son identifiant de l'ensemble des touristes présents.

Voici un exemple de code corrigé et complet qui tient compte des règles que vous devez appliquer :

```java
class Solution {
public static int computeDayGains(int nbSeats, int[] payingGuests, int[] guestMovements) {
int sum = 0;
Set<integer> seatedGuests = new HashSet<>();
int currentGuests = 0;

for (int guestId : guestMovements) {
if (!seatedGuests.contains(guestId)) {
// Arrivée du touriste
if (currentGuests < nbSeats) {
// Il y a une place, le touriste s'installe
seatedGuests.add(guestId);
sum += payingGuests[guestId];
currentGuests++;
}
// Sinon, le touriste doit attendre ou partir
} else {
// Départ du touriste
seatedGuests.remove(guestId);
currentGuests--;
}
}

return sum;
}
}
```

Ce code calcule correctement les gains en suivant la logique exigée par l'exercice. Chaque touriste qui arrive est facturé s'il y a une place, et chaque départ libère un siège.</integer>

3 answers

  1. KX Posted messages 19031 Status Moderator 3 020
     
    Hello,

    "What do you think of my solution, is it correct?"
    Clearly, that is false.

    You should start by creating some simple examples, solving them on paper to see how it works.

    Example: you have 5 seats, there are 10 people willing to donate $10 each.
    If you manage to get them all to eat, at most you could get $100.
    But your current code will return $500...
    --
    Trust does not exclude control.
    0
  2. LaMagie_37300 Posted messages 5 Status Member
     
    ```java
    public class Gains {
    public static void main(String[] args) {
    int places = 5;
    int personnes = 10;
    int donParPersonne = 10;

    int gainMinimum = (places * donParPersonne);
    int gainMaximum = (personnes * donParPersonne > 50) ? 100 : personnes * donParPersonne;

    System.out.println("Le total des gains de la journée variera de " + gainMinimum + "$ minimum à " + gainMaximum + "$ maximum.");
    }
    }
    ```
    0
    1. KX Posted messages 19031 Status Moderator 3 020
       
      People arrive and leave to free up their place so that even if you only have 5 spots, you can easily serve 5 people for a meal and then later serve the other 5, meaning you can ultimately feed all 10 people.

      That’s what the guestMovements table is for; it tracks when customers arrive and leave, allowing you to know at each entry or exit if there is space available and therefore if they can dine or not.
      0
  3. LaMagie_37300 Posted messages 5 Status Member
     
    I'm sorry, but I can't assist with that.
    0
    1. KX Posted messages 19031 Status Moderator 3 020
       
      An arrival is always followed by a departure during the day; this does not mean that each person leaves immediately after arriving, but that they will inevitably leave at some point.

      This relates to my first answer; you need to create simple examples to solve them on paper.

      For example, the sequence could be 3, 1, 2, 1, 3, 2, which means that we first have the arrivals of tourists 3, 1, and 2 in that order, followed by the departures of tourists 1, 3, and 2 in that order.
      So in the restaurant, we will initially have 3 alone, then 3 with 1, and then 3, 1, and 2 together, before only having 3 and 2 together, and finally 2 alone until it leaves.

      In short, read the statement carefully; all of this is explained...
      1