Рубрики

Проверьте, находится ли робот в пределах сетки после заданных ходов

Учитывая сетку размера NXM и робот размещается в ячейке (N — 1, M — 1) . Кроме того, данная строка str состоит только из символов «U» (вверх), «D» (вниз), «L» (слева) и «R» (справа), представляющих движения, которые робот будет выполнять в сетке. , Задача состоит в том, чтобы определить, будет ли робот в безопасности в конце последнего хода. Робот считается безопасным, если он находится в пределах сетки.

Примечание . Учтите, что под числовой линией присутствует прямоугольная сетка с верхним левым углом, лежащим на начале координат.

Примеры:

Input: N = 1, M = 1, str = “R”
Output: No
As there is only 1 cell, no movement is allowed.

Input: N = 2, M = 3, str = “LLRU”
Output: Yes

Подход: для каждого движения обновляйте положение робота внутри сетки. если на каком-либо шаге положение робота находится за пределами сетки, то на выходе будет « Нет», иначе выведите « Да», если для всех ходов робот находится в пределах сетки.

Ниже приведена реализация вышеуказанного подхода:

C ++

// C ++ реализация подхода
#include <bits/stdc++.h>

using namespace std;

  
// Функция, которая возвращает true, если робот безопасен

bool isSafe(int N, int M, string str)

{

  

    int coll = 0, colr = 0, rowu = 0, rowd = 0;

  

    for (int i = 0; i < str.length(); i++) {

  

        // Если текущий ход "L", то

        // увеличиваем счетчик колл

        if (str[i] == 'L') {

            coll++;

            if (colr > 0) {

                colr--;

            }

  

            // Если значение coll равно

            // столбец затем разбить

            if (coll == M) {

                break;

            }

        }

  

        // Если текущий ход "R", то

        // увеличиваем счетчик colr

        else if (str[i] == 'R') {

            colr++;

            if (coll > 0) {

                coll--;

            }

  

            // Если значение colr равно

            // столбец затем разбить

            if (colr == M) {

                break;

            }

        }

  

        // Если текущий ход "U", то

        // увеличиваем счетчик строки

        else if (str[i] == 'U') {

            -rowu++;

            if (rowd > 0) {

                rowd--;

            }

  

            // Если значение rowu равно

            // строка затем ломается

            if (rowu == N) {

                break;

            }

        }

  

        // Если текущий ход "D", то

        // увеличиваем счетчик rowd

        else if (str[i] == 'D') {

            rowd++;

            if (rowu > 0) {

                rowu--;

            }

  

            // Если значение rowd равно

            // строка затем ломается

            if (rowd == N) {

                break;

            }

        }

    }

  

    // Если робот находится в пределах сетки

    if (abs(rowd) < N && abs(rowu) < N

        && abs(coll) < M && abs(colr) < M) {

        return true;

    }

  

    // Небезопасно

    return false;

}

  
// Код драйвера

int main()

{

    int N = 1, M = 1;

    string str = "R";

  

    if (isSafe(N, M, str))

        cout << "Yes";

    else

        cout << "No";

  

    return 0;

}

Джава

// Java реализация подхода

class GFG {

  

    // Функция, которая возвращает true, если робот безопасен

    static boolean isSafe(int N, int M, char[] str)

    {

  

        int coll = 0, colr = 0, rowu = 0, rowd = 0;

  

        for (int i = 0; i < str.length; i++) {

  

            // Если текущий ход "L", то

            // увеличиваем счетчик колл

            if (str[i] == 'L') {

                coll++;

                if (colr > 0) {

                    colr--;

                }

  

                // Если значение coll равно

                // столбец затем разбить

                if (coll == M) {

                    break;

                }

            }

  

            // Если текущий ход "R", то

            // увеличиваем счетчик colr

            else if (str[i] == 'R') {

                colr++;

                if (coll > 0) {

                    coll--;

                }

  

                // Если значение colr равно

                // столбец затем разбить

                if (colr == M) {

                    break;

                }

            }

  

            // Если текущий ход "U", то

            // увеличиваем счетчик строки

            else if (str[i] == 'U') {

                rowu++;

                if (rowd > 0) {

                    rowd--;

                }

  

                // Если значение rowu равно

                // строка затем ломается

                if (rowu == N) {

                    break;

                }

            }

  

            // Если текущий ход "D", то

            // увеличиваем счетчик rowd

            else if (str[i] == 'D') {

                rowd++;

                if (rowu > 0) {

                    rowu--;

                }

  

                // Если значение rowd равно

                // строка затем ломается

                if (rowd == N) {

                    break;

                }

            }

        }

  

        // Если робот находится в пределах сетки

        if (Math.abs(rowd) < N && Math.abs(rowu) < N

            && Math.abs(coll) < M && Math.abs(colr) < M) {

            return true;

        }

  

        // Небезопасно

        return false;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        int N = 1, M = 1;

        String str = "R";

  

        if (isSafe(N, M, str.toCharArray()))

            System.out.println("Yes");

        else

            System.out.println("No");

    }

}

  
// Этот код предоставлен 29AjayKumar

python3

# Python 3 реализация подхода

  
# Функция, которая возвращает true
# если робот в безопасности

def isSafe(N, M, str):

    coll = 0

    colr = 0

    rowu = 0

    rowd = 0

  

    for i in range(len(str)):

          

        # Если текущий ход "L", то

        # увеличить счетчик колл

        if (str[i] == 'L'):

            coll += 1

            if (colr > 0):

                colr -= 1

  

            # Если значение coll равно

            # столбец затем разбить

            if (coll == M):

                break

  

        # Если текущий ход "R", то

        # увеличить счетчик цветов

        elif (str[i] == 'R'):

            colr += 1

            if (coll > 0):

                coll -= 1

  

            # Если значение colr равно

            # столбец затем разбить

            if (colr == M):

                break

  

        # Если текущий ход "U", то

        # увеличить счетчик строки

        elif (str[i] == 'U'):

            rowu += 1

            if (rowd > 0):

                rowd -= 1

  

            # Если значение rowu равно

            # строка затем разбить

            if (rowu == N):

                break

  

        # Если текущий ход "D", то

        # увеличить счетчик rowd

        elif (str[i] == 'D'):

            rowd += 1

            if (rowu > 0):

                rowu -= 1

  

            # Если значение rowd равно

            # строка затем разбить

            if (rowd == N):

                break

  

    # Если робот находится в пределах сетки

    if (abs(rowd) < N and abs(rowu) < N and 

        abs(coll) < M and abs(colr) < M):

        return True

  

    # Небезопасно

    return False

  
# Код драйвера

if __name__ == '__main__':

    N = 1

    M = 1

    str = "R"

  

    if (isSafe(N, M, str)):

        print("Yes")

    else:

        print("No")

  
# Этот код предоставлен
# Surendra_Gangwar

C #

// C # реализация подхода

using System;

  

class GFG {

  

    // Функция, которая возвращает true, если робот безопасен

    static bool isSafe(int N, int M, char[] str)

    {

  

        int coll = 0, colr = 0, rowu = 0, rowd = 0;

  

        for (int i = 0; i < str.Length; i++) {

  

            // Если текущий ход "L", то

            // увеличиваем счетчик колл

            if (str[i] == 'L') {

                coll++;

                if (colr > 0) {

                    colr--;

                }

  

                // Если значение coll равно

                // столбец затем разбить

                if (coll == M) {

                    break;

                }

            }

  

            // Если текущий ход "R", то

            // увеличиваем счетчик colr

            else if (str[i] == 'R') {

                colr++;

                if (coll > 0) {

                    coll--;

                }

  

                // Если значение colr равно

                // столбец затем разбить

                if (colr == M) {

                    break;

                }

            }

  

            // Если текущий ход "U", то

            // увеличиваем счетчик строки

            else if (str[i] == 'U') {

                rowu++;

                if (rowd > 0) {

                    rowd--;

                }

  

                // Если значение rowu равно

                // строка затем ломается

                if (rowu == N) {

                    break;

                }

            }

  

            // Если текущий ход "D", то

            // увеличиваем счетчик rowd

            else if (str[i] == 'D') {

                rowd++;

                if (rowu > 0) {

                    rowu--;

                }

  

                // Если значение rowd равно

                // строка затем ломается

                if (rowd == N) {

                    break;

                }

            }

        }

  

        // Если робот находится в пределах сетки

        if (Math.Abs(rowd) < N && Math.Abs(rowu) < N

            && Math.Abs(coll) < M && Math.Abs(colr) < M) {

            return true;

        }

  

        // Небезопасно

        return false;

    }

  

    // Код драйвера

    public static void Main(String[] args)

    {

        int N = 1, M = 1;

        String str = "R";

  

        if (isSafe(N, M, str.ToCharArray()))

            Console.WriteLine("Yes");

        else

            Console.WriteLine("No");

    }

}

  
// Этот код предоставлен 29AjayKumar

Выход:

No

Рекомендуемые посты:

Проверьте, находится ли робот в пределах сетки после заданных ходов

0.00 (0%) 0 votes