CSES - Ruudukko

Annettuna on n \times n -ruudukko, jonka joissain ruuduissa on kolikko.

Yhdellä siirrolla voit kerätä kaikki kolikot haluamaltasi pysty- tai vaakariviltä. Mikä on pienin tarvittava määrä siirtoja kerätä kaikki kolikot?

Ruudukon kuvauksessa merkki . tarkoittaa tyhjää ja merkki X tarkoittaa kolikkoa. Voit olettaa, että 1 \le n \le 20.

Python

Toteuta tiedostoon coingrid.py funktio count, joka ilmoittaa pienimmän määrän siirtoja kerätä kaikki kolikot.

def count(r):
    # TODO

if __name__ == "__main__":
    r =["........",
        "........",
        "...X..X.",
        "........",
        "....X...",
        "..X.X..X",
        "........",
        "....X..."]
    print(count(r)) # 3

Java

Toteuta tiedostoon CoinGrid.java metodi count, joka ilmoittaa pienimmän määrän siirtoja kerätä kaikki kolikot.

public class CoinGrid {
    public int count(String[] r) {
        // TODO
    }

    public static void main(String[] args) {
        CoinGrid c = new CoinGrid();
        String[] r = {"........",
                      "........",
                      "...X..X.",
                      "........",
                      "....X...",
                      "..X.X..X",
                      "........",
                      "....X..."};
        System.out.println(c.count(r)); // 3
    }
}