CSES - Seinät ja lattiat

Ruudukossa on n×nn \times n ruutua, joista jokainen on aluksi seinää. Rivit ja sarakkeet on numeroitu 1n1 \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)(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