Problem Statement
You are building a house and are laying the floorboards in one of the rooms. Each floorboard is a rectangle 1 unit wide and can be of any positive integer length. Floorboards must be laid with their sides parallel to one of the sides of the room and cannot overlap. In addition, the room may contain features such as pillars, which lead to areas of the floor where no floorboards can be laid. The room is rectangular and the features all lie on a unit-square grid within it. You want to know the minimum number of floorboards that you need to completely cover the floor.
You are given a
Definition
- Class:
- FloorBoards
- Method:
- layout
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int layout(String[] room)
- (be sure your method is public)
Constraints
- room will contain between 1 and 10 elements, inclusive.
- Each element of room will contain between 1 and 10 characters, inclusive.
- Each element of room will contain the same number of characters.
- Each character in room will be a '.' or a '#'.
Examples
{"....." ,"....." ,"....." ,"....." ,"....."}
Returns: 5
5 boards laid side-by-side will cover this square room.
{"......." ,".#..##." ,".#....." ,".#####." ,".##..#." ,"....###"}
Returns: 7
A possible optimal layout could look like the following |------ |#--##| |#----| |#####| |##--#| |---### Each floorboard is represented by a consecutive horizontal sequence of '-' characters or a consecutive vertical sequence of '|' characters.
{"####" ,"####" ,"####" ,"####"}
Returns: 0
This is a strange room, with no floor area to cover.
{"#...#.",".##...","......","......","....##","##...."}
Returns: 8
{"#.#...",".#....",".#....","...#..","##.##.","......"}
Returns: 8
{"..#...","...#..","...#..","..#...",".###..","#.#..."}
Returns: 9
{"...#.." ,"##...." ,"#.#..." ,".#...." ,"..#..." ,"..#..#"}
Returns: 9
An optimal pattern here is: ---#|| ##--|| #-#||| |#-||| ||#||| ||#||#
{".#...." ,"..#..." ,".....#" ,"..##.." ,"......" ,".#..#."}
Returns: 9
{"..........",".....#..#.","...#...#.#",".#....##.#","#.........","..##..#...","...###..#.","#..#.....#","#..##..#..","..##......"}
Returns: 22
{"......#..#","..###.....","......#.#.","#..#.#...#","..##..##..","#.........",".#.#.###..","..##.#.#..",".........#",".....#..##"}
Returns: 23
{"#.#.#.#...",".##.......","..#....#..",".##.......","....#.#...",".........#",".#.#.#..#.","..##..#..#","...#.#..#.",".......#.."}
Returns: 24
{".##...##..","......##..","....##....","....#.....","#.##....#.",".#..#.#...",".......#..","..#....#..","..#...#...",".......#.."}
Returns: 21
{"###...#..#","##.....#.#","#.....#.#.","....#..#..",".#.#......",".##....##.","...#......",".#..#.....",".#......#.","##....#..#"}
Returns: 21
{"..#.......",".#.....#..","...#..#...","#.##..#...","...##..#..",".##...#..#","#......#..",".#...#.#..","##...#....",".###.#..#."}
Returns: 24
{"#....#.#..","......###.",".#...#....","..##......",".#..#..#..","..#....###","........#.",".##...#...",".#......#.","..#....#.."}
Returns: 23
{"#..###.#..",".....#####",".#..#.....","#.##......","....#.....","#.........","..##......",".#.....#..","..##.###.#","......#..#"}
Returns: 22
{".#.....#..","##...#...#",".##....#..",".#.#......","#....#.##.",".##.#.....","..........",".#...#....","...##....#",".#......#."}
Returns: 23
{".###......","...#....#.",".#....#...",".#.#...###","#..###....","..##......","..#..#..##","..#.....#.",".....#....",".......#.."}
Returns: 21
{"###.#.###.","#.#####..#",".###..###.",".#.#...###",".#####.##.","...#..#.#.","#.##..###.","#.##.###..","#####.##.#","#...######"}
Returns: 20
{"###.###.#.","#...##.##.","..##..#.##",".###..####","...###.###","####.#.#.#","###..#.###","####..##.#","##.##.#.#.","####.###.#"}
Returns: 22
{"##.##.#...","#####.##.#","#..#.#####","#..#..#.#.","#.#.#..#.#","##.#.#.##.","#######..#","#####...##",".####.#.##","####.####."}
Returns: 23
{".#..#####.","##..#####.","..#####..#",".#####..#.","###.##.##.","#.#.#.##..","##.#######","##...#.#.#","#..#.#####","..#####..#"}
Returns: 22
{"#..####.##","#...##..#.","##.#..###.","#####.#.##","..#.#.####","##.#...##.","...##..###","##..#####.","..#.######","##..#####."}
Returns: 21
{".##.######","#..#####..","....####.#","####.###.#","#####...#.","##.##.#.#.","#.#.####.#","#....#.###","###.##..#.",".##.#.##.#"}
Returns: 23
{"#.#####.##","##########",".#...###..","####.#.##.","##.###...#","..###...##",".#..####.#","##...#.##.",".#.#######",".###..#.#."}
Returns: 23
{"...##..#..",".####...#.","######..##","##..######","##########","##.#.###..","##..#.#...",".#.#..###.","..##.#.###","###.####.#"}
Returns: 21
{".#.##.###.","#.#..##..#","##..##.###","###..##...","########.#","..#.#..#.#","#.##.###.#","...#######",".####.####",".###.#.#.."}
Returns: 23
{"##.###.##.","######..##",".###..#.#.","##...###..","###..###.#","###..##.##","##.#.###..","##.####.##",".##.##...#","#.####.###"}
Returns: 20
{".......#..",".......#.#","....#.....","..........","....#.....","..........","........#.","..#.......","..#.#..#..",".........."}
Returns: 15
{".##.......","..........","......#...","..#.......","#......#..",".#........","..........","..........","....#.....","...#......"}
Returns: 16
{"....#.....",".....#....","..........","..........","..........",".#..#....#",".....#.#..",".......#..","..........","......#..."}
Returns: 16
{"...#...#..","..#.......","....#..#..","..........",".#........","..........",".......#..","..........","......##..",".......#.."}
Returns: 16
{".#........","..........",".........#",".......#..","..........","........#.","....##....","..........","#.#......#","....#....."}
Returns: 16
{"..........","#.........","#......#..","......#..#","..........","#.........",".......#..","..........","..........",".....##.#."}
Returns: 15
{".......#..",".........#","..........",".#.....#..","....#.....","..........","........#.",".........#","......#...",".......#.."}
Returns: 17
{"..##...#..","..........","..........","..........",".#........","#.....#...",".#........","..........",".#......#.","......#..."}
Returns: 16
{"..........","..#.......","..........","#......#..","...#...#..","...#......","#.........","....#.....","#.........",".....#...."}
Returns: 17
{"#.........","....#.....","...#......","..#.......","..........","..........",".....#..#.","..........","..........","...#....##"}
Returns: 15
{"..........","..........","..........","..........","..........","..........","..........","..........","..........",".........."}
Returns: 10
{"##########" ,"######.###" ,"######.###" ,"#......###" ,"###.##.###" ,"###.##.###" ,"###......#" ,"###.######" ,"###.######" ,"##########"}
Returns: 4
{".##","###",".#.","...",".#.","#.#"}
Returns: 5
{".","#",".",".","#",".","#","."}
Returns: 4
{"#..#.#.#.#","#.##..##.#","....#..#.#","..##.#..#.","##.###....","#...#..#..","##..#.....",".......#.."}
Returns: 19
{".##.#.","..#..#","..##.#","###...",".....#"}
Returns: 7
{"...#","##.#"}
Returns: 2
{".#...#..","#...#...","##.#####","#.......","#...#.#."}
Returns: 10
{"#.......","#..##...","..#..###",".#...#..",".##..#.#"}
Returns: 10
{"#.#","...","#.#","...","#..","#..","#..","##.","#.#",".#."}
Returns: 8
{"......#..#","....#..#..","...#...##.","..#.#.###.","...#.#..##","##..#..#.#","....#.###.","###.....#.",".##.###..."}
Returns: 24
{"....","#.##","###.","..##","....","...#","##..",".#.."}
Returns: 9
{".#.#...#.#", "..#...#...", ".....#...#", "#.#.#.#.#.", ".#...#....", "#...#.#.#.", "...#...#.#", "#...#.#...", ".#.#.#.#.#", "..#...#..." }
Returns: 33
{"....#.....", "...#.....#", "..#.....#.", ".#.....#..", "#.....#...", ".....#...#", "...##...#.", "...#....#.", "..#....#..", "#....#...." }
Returns: 24
{"....#..##.", ".#..#..#..", "......#...", "..#.....#.", "..#..#....", "..#.....#.", "#...#.....", "#.....#...", "...###....", ".....#...#" }
Returns: 20
{"..#..#..#.", "#..#..#..#", ".#..#..#..", "..#.....#.", "#..#..#..#", ".#..#..#..", ".....#..#.", "#..#..#..#", ".#.....#..", "..#..#..#." }
Returns: 34
{".#..#..#..", "###.#.####", "##..#.....", "###.#.###.", "#...#..##.", "###.#.###.", "##..#...#.", "###.#.###.", "#......##.", "#########." }
Returns: 14
{"...##...#.", "##...##.#.", "#...##..#.", "..#.##.#..", ".#.#.#....", "#....####.", "##.##.....", "#.##..##..", "#.#...#...", ".........." }
Returns: 23
{"###.#", "....#", "#.#.#", "#....", "#.###" }
Returns: 4
{"...##..#..", "#..#..#..#", "#.#.....#.", "..#.#.#.##", "..........", ".##.#.##.#", ".#..#.#...", "....#.....", "...#...##.", "#...##...." }
Returns: 25
{".#.#..#..#", "..#..##.#.", "#.#..#.#..", "...#.#...#", ".#.....#..", "...###...#", "#.....#...", ".##.#.#.#.", ".....#....", "...#....#." }
Returns: 27
{".......", ".#..##.", ".#.....", ".#####.", ".##..#.", "....###" }
Returns: 7
{"##..##..##", "..##..##..", "##..##..##", "..##..##..", "##..##..##", "..##..##..", "##..##..##", "..##..##..", "##..##..##", "..##..##.." }
Returns: 25
{".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#." }
Returns: 50
{"#.#", "...", "#.#" }
Returns: 3
{"#.#.#.#..#", "#.#.#..#.#", "#.#.#.#.##", ".#.#..#.##", "..........", "#.#.#.##.#", "..#.#..###", "......#.#.", "##..#.#.#.", "...##.#..." }
Returns: 22
{"##..#.....", "....#.#...", "....###..#", "....##..#.", "....#.#...", "...###...#", "....##..#.", "..........", "#.#.#.#.#.", "...###...#" }
Returns: 21
{"#.#.#.#.#.", "..........", "#.#.#.#.#.", "..........", "#.#.#.#.#.", "..........", "#.#.#.#.#.", "..........", "#.#.#.#.#.", "....###..." }
Returns: 27
{"####", "##.#", "##.#", "...." }
Returns: 2
{".#.#.#.#.#", ".#.#.#.#.#", ".#.#.#.#.#", ".#.#.#.#.#", "..........", ".#.#.#.#.#", ".#.#.#.#.#", ".#.#.#.#.#", ".#.#.#.#.#", ".#.#.#.#.#" }
Returns: 10
{"......##.#", "####....#.", "##.#..#.##", "....#.###.", "##.....#..", ".#..#.####", ".....#..#.", "#..###..##", "....#.####", "#.#.#..#.#" }
Returns: 25
{"#.#####.#", "#.......#", "#.#.#.#.#", "....#....", "###.#.###", "....#....", "#.#.#.#.#", "#.......#", "#.#####.#" }
Returns: 12
{"..#..#....", ".#..#..#..", "#..#..#..#", "..#..#..#.", ".#..#..#..", "...#..#..#", "#.#..#..#.", ".#.....#..", "...#.#....", "..#.....#." }
Returns: 33
{".....", ".#.#.", ".....", ".#.#.", "....." }
Returns: 7
{"...#.....#", "....#.....", ".....#....", "...#..#...", "#...#.....", "....#..#..", ".#........", "...###....", "...#......", "...##...#." }
Returns: 20
{"...#.#....", "..#..##..#", "...#......", "........#.", "..##......", "..#.#.#...", ".#......#.", ".#..#.....", ".....#....", "...#.....#" }
Returns: 22
{"###.", "....", "###." }
Returns: 2
{"....#..#..", "##....#...", ".#.#.#.#.#", "..........", "#.#.#.#.#.", "###...##..", ".....####.", ".##.##....", "#....#...#", "...#.....#" }
Returns: 24
{"#...#....#", ".#....#..#", ".######..#", "..#.......", ".##..###..", "..#.#....#", "..#..#...#", ".##...#..#", ".#.....#..", "#........." }
Returns: 20
{".##..#..##", "#......###", "..........", "#......###", "#....#..##", ".......##.", "#....##...", "..#.#...##", "..........", "#........#" }
Returns: 17
{"#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#.#.#.#.", ".#.#.#.#.#" }
Returns: 50
{".#.#.#.#..", "#.#.#.#..." }
Returns: 9
{".#.#.#..##", ".#.#.#..##", "######..##", ".#.#......", ".#.#.#..##", "#####.....", "######....", "#####..#.#", "##.##.#..#" }
Returns: 16
{"......#...", ".#....#...", "..#...#...", ".........#", "#.....#...", "...#.#....", "....#.#...", ".........#", "#.....#...", "..#...#..." }
Returns: 21
{"###..###", "###..###", "###..###", "...#####", "#####...", "###.####", "###.####", "###.####" }
Returns: 5
{"#####.####", "#####.####", "#####.####", "#####.####", "..........", "#####.####", "#####.####", "#####.####", "#####.####", "#####.####" }
Returns: 3
{"..........", "..........", "..........", "..........", "..........", "....#...#.", "..........", "..........", "..........", ".........." }
Returns: 12
{".###.", ".#.#.", ".#.#.", ".#.#.", ".#.#.", "....." }
Returns: 4
{"###.###", "###.###", "###.###", ".......", "###.###", "###.###", "###.###" }
Returns: 3
{"####.##.##", ".###..####", "##....#.##", "###..##...", "....#.....", "#.#.#####.", ".#####.#.#", "###....#.#", "..##.####.", "##.#######" }
Returns: 20
{"..#..#..#.", "..#..#..#.", "...#...#..", "#.#.#.#.#.", ".#...#...#", ".##..#..#.", "..........", "#.#.#.#.#.", ".#.#.#.#.#", ".#.#.#.#.#" }
Returns: 27
{"...", "...", ".#." }
Returns: 3
{"#.#.#...#.", "...#.#.#..", "#.#...#.#.", ".#.#.#...#", "#...#.#.#.", ".#.#...#.#", "..#.#.#...", ".#...#.#.#", "#.#.#...#.", "...#.#.#.." }
Returns: 38
{"####.####", "####.####", "#.......#", "#.......#", "#.......#", "#.......#", "####.####", "####.####" }
Returns: 6
{"...#", "...#", "#..#", "#..#" }
Returns: 3
{"##.##", "##.##", ".....", ".....", "##.##", "##.##" }
Returns: 4
{".#.#.#", "#.#.##", "####..", "....#.", "#.#.##", "######", "......", "######", "....#.", "######" }
Returns: 13
{".#.#.#.##.", "..#.###...", "#...######", ".##....###", ".#.###...#", "#..#.#.##.", ".#####.###", "....#.#.#.", ".##....##.", "###..##..#" }
Returns: 25
{"..#..#..#.", ".#..#..#..", "#..#..#..#", "..#..#..#.", ".#..#..#..", "#..#..#..#", "..#..#..#.", ".#..#..#..", "#..#..#..#", "..#..#..#." }
Returns: 37
{".#......#.", "..#..##...", ".#.##....#", "....##..#.", "#....#..##", "..#..#.##.", "...#..##..", "..#...#..#", "#..#.#....", "....#..#.." }
Returns: 26
{".#.#.#.#.#", "#.#.#.#.#.", ".#.#...#.#", "#.#.#.#.#.", ".#.#.#.#.#", "#...#.#.#.", ".#.#.#...#", "#.#.#.#.#.", ".#.#.#.#.#", "#.#...#.#." }
Returns: 46
{"##..#.....", "#######.#.", "#..#..#..#", "#.#.#.###.", "##.##.###.", "#..######.", ".#........", ".#.#...##.", "##......#.", ".#.##...##" }
Returns: 19
{"..#.....#.", "...####...", "####....##", "##########", "....#.#.#.", "....####..", "...#.#....", "#...#...##", "..........", "#..#...###" }
Returns: 20
{".#.#", "#..#", "#.#.", "...#", "#.#.", ".##.", ".#.#" }
Returns: 9
{"#.#", "...", "#.#", "..." }
Returns: 4
{"#..#######", "....######", "#.########", "#.########", "#.########", "#.##.#.#.#", "###......#", "####.#.#.#", ".#.######.", ".........." }
Returns: 13
{"#.#", "#.#", "#.#", "#.#", "...", "#.#", "..." }
Returns: 4
{"####.#####", "####.#####", "####.#####", "####.#####", "..........", "####.#####", "####.#####", "####.#####", "####.#####", "####.#####" }
Returns: 3
{".#.#.#.#", "#.#.#.#.", ".#.#...#", "#.#.#.#.", ".#.#.#.#", "#.#.#.#.", ".#.#.#.#", "#.#.#.#.", ".#.#.#.#", "#.#.#.#." }
Returns: 39