CSES - Seinät ja lattiat

Tarkastellaan n \times n -ruudukkoa, jonka jokainen ruutu on aluksi seinäruutu. 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 tiedostoon wallgrid.py luokka WallGrid, jossa on seuraavat metodit:

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

Metodien tulee toimia tehokkaasti myös suurella ruudukolla.

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

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

    def count_rooms(self):
        # TODO

if __name__ == "__main__":
    wall_grid = WallGrid(5)

    print(wall_grid.count_rooms()) # 0

    wall_grid.create_floor(2, 2)
    wall_grid.create_floor(4, 2)
    print(wall_grid.count_rooms()) # 2

    wall_grid.create_floor(3, 2)
    print(wall_grid.count_rooms()) # 1

    wall_grid.create_floor(2, 4)
    wall_grid.create_floor(2, 4)
    wall_grid.create_floor(4, 4)
    print(wall_grid.count_rooms()) # 3

    wall_grid.create_floor(3, 3)
    print(wall_grid.count_rooms()) # 3

    wall_grid.create_floor(3, 4)
    print(wall_grid.count_rooms()) # 1