CSES - Seinät ja lattiat

Ruudukossa on n \times n ruutua, joista jokainen on aluksi seinää. Rivit ja sarakkeet on numeroitu 1 \dots n. Ruudukosta aletaan poistaa seinää muuttamalla seinäruutuja lattiaruuduiksi.

Tehtäväsi on pitää kirjaa huoneiden määrästä tässä prosessissa. Huoneissa lattiaruutuja voi kulkea vaaka- ja pystysuuntaisesti, kuten aiemmissa kurssin tehtävissä.

Toteuta luokka WallGrid, jossa on seuraavat metodit:

  • remove muuttaa ruudun (x,y) lattiaksi, mikäli se ei jo ole lattiaa
  • count ilmoittaa, montako huonetta ruudukossa on

Metodien tulee toimia tehokkaasti myös suurella ruudukolla.

Toteuta luokka tiedostoon wallgrid.py seuraavan esimerkin mukaisesti.

class WallGrid:
    def __init__(self, n):
        # TODO

    def remove(self, x, y):
        # TODO

    def count(self):
        # TODO

if __name__ == "__main__":
    w = WallGrid(5)
    print(w.count()) # 0
    w.remove(2, 2)
    w.remove(4, 2)
    print(w.count()) # 2
    w.remove(3, 2)
    print(w.count()) # 1
    w.remove(2, 4)
    w.remove(2, 4)
    w.remove(4, 4)
    print(w.count()) # 3
    w.remove(3, 3)
    print(w.count()) # 3
    w.remove(3, 4)
    print(w.count()) # 1