CSES - Seinät ja lattiat

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

  • create_floor muuttaa ruudun (x,y)(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