Ctrl K

Корабли на поле

Средняя
Дано поле для морского боя — прямоугольная таблица grid, где 'X' — клетка корабля, а '.' — вода. Посчитайте, сколько на поле кораблей. Каждый корабль — прямая полоска клеток: либо одна строка и несколько подряд идущих столбцов, либо один столбец и несколько подряд идущих строк. Разные корабли никогда не соприкасаются сторонами (углами — могут). Попробуйте обойтись одним проходом по полю, дополнительной памятью O(1) и не меняя grid.
Пример 1
grid=[['X', 'X', '.', 'X'], ['.', '.', '.', 'X'], ['X', '.', '.', '.']] → 3

Горизонтальный корабль из двух клеток в левом верхнем углу, вертикальный из двух клеток справа и одноклеточный внизу слева — всего 3.

Пример 2
grid=[['.', 'X'], ['X', '.']] → 2

Клетки касаются только углами, значит, это два разных корабля.

Пример 3
grid=[['.', '.', '.']] → 0

Кораблей нет.

Ограничения
  • 1 ≤ число строк, число столбцов ≤ 200
  • grid[i][j] — это 'X' или '.'
  • Расстановка корректна: каждая связная по сторонам группа клеток 'X' — прямая полоска
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСлово на сетке букв СредняяОсушение замкнутых прудов СредняяУчастки суши на карте СредняяДождь стекает в оба моря СредняяОстановится ли шарик в цели Средняя
загружаем Python…
Вход
grid=[['X', 'X', '.', 'X'], ['.', '.', '.', 'X'], ['X', '.', '.', '.']]
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 71 тест на сервере, включая скрытые.