DEV Community

Cover image for Day 29 of 100 days dsa coding challenge
Manasi Patil
Manasi Patil

Posted on

Day 29 of 100 days dsa coding challenge

Taking on a new challenge: solving GeeksforGeeks POTD daily and sharing my solutions! πŸ’»πŸ”₯
The goal: sharpen problem-solving skills, level up coding, and learn something new every day. Follow my journey! πŸš€

100DaysOfCode #CodingChallenge #ProblemSolving #GeeksforGeeks #DeveloperJourney

Problem:

https://www.geeksforgeeks.org/problems/replace-os-with-xs0052/1

Replace O's with X's

Difficulty: Medium Accuracy: 34.0%

You are given a grid[][] of size n*m, where every element is either 'O' or 'X'. You have to replace all 'O' or a group of 'O' with 'X' that are surrounded by 'X'.
A 'O' (or a set of 'O') is considered to be surrounded by 'X' if there are 'X' at locations just below, just above, just left and just right of it.
Examples:
Input:
grid[][] = [['X', 'X', 'X', 'X'],
['X', 'O', 'X', 'X'],
['X', 'O', 'O', 'X'],
['X', 'O', 'X', 'X'],
['X', 'X', 'O', 'O']]
Output:
[['X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X'],
['X', 'X', 'O', 'O']]
Explanation: We only changed those 'O' that are surrounded by 'X'
Input:
grid[][] = [['X', 'O', 'X', 'X'],
['X', 'O', 'X', 'X'],
['X', 'O', 'O', 'X'],
['X', 'O', 'X', 'X'],
['X', 'X', 'O', 'O']]
Output:
[['X', 'O', 'X', 'X'],
['X', 'O', 'X', 'X'],
['X', 'O', 'O', 'X'],
['X', 'O', 'X', 'X'],
['X', 'X', 'O', 'O']]
Explanation: There's no 'O' that's surround by 'X'.
Input:
grid[][] = [['X', 'X', 'X'],
['X', 'O', 'X'],
['X', 'X', 'X']]
Output:
[['X', 'X', 'X'],
['X', 'X', 'X'],
['X', 'X', 'X']]
Explanation: There's only one 'O' that's surround by 'X'.
Constraints:
1 ≀ grid.size() ≀ 100
1 ≀ grid[0].size() ≀ 100

Solution:
class Solution:
def fill(self, grid):
n, m = len(grid), len(grid[0])

    def dfs(i, j):
        if i < 0 or i >= n or j < 0 or j >= m or grid[i][j] != 'O':
            return
        grid[i][j] = '#'
        dfs(i + 1, j)
        dfs(i - 1, j)
        dfs(i, j + 1)
        dfs(i, j - 1)

    for i in range(n):
        if grid[i][0] == 'O':
            dfs(i, 0)
        if grid[i][m - 1] == 'O':
            dfs(i, m - 1)

    for j in range(m):
        if grid[0][j] == 'O':
            dfs(0, j)
        if grid[n - 1][j] == 'O':
            dfs(n - 1, j)

    for i in range(n):
        for j in range(m):
            if grid[i][j] == 'O':
                grid[i][j] = 'X'
            elif grid[i][j] == '#':
                grid[i][j] = 'O'
    return grid
Enter fullscreen mode Exit fullscreen mode

Top comments (0)