Final cell position in the matrix

Given an array of list of commands U(Up), D(Down), L(Left) and R(Right) and initial cell position (x, y) in a matrix. Find the final cell position of the object in the matrix after following the given commands. It is assumed that the final required cell position exists in the matrix.

Examples:

Input : command[] = "DDLRULL"
        x = 3, y = 4
Output : (1, 5)

Input : command[] = "LLRUUUDRRDDDULRLLUDUUR"
        x = 6, y = 5
Output : (6, 3)

Source: Flipkart Interview (SDE-1 On Campus).



Approach: Following are the steps:

  1. Count cup, cdown, cleft and cright for U(Up), D(Down), L(Left) and R(Right) movements respectively.
  2. Calculate final_x = x + (cright – cleft) and final_y = y + (cdown – cup).

The final cell position is (final_x, final_y)

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to find the final cell position
// in the given matrix
#include <bits/stdc++.h>
  
using namespace std;
  
// function to find the final cell position
// in the given matrix
void finalPos(char command[], int n,
              int x, int y)
{
    // to count up, down, left and cright
    // movements
    int cup, cdown, cleft, cright;
  
    // to store the final coordinate position
    int final_x, final_y;
  
    cup = cdown = cleft = cright = 0;
  
    // traverse the command array
    for (int i = 0; i < n; i++) {
        if (command[i] == 'U')
            cup++;
        else if (command[i] == 'D')
            cdown++;
        else if (command[i] == 'L')
            cleft++;
        else if (command[i] == 'R')
            cright++;
    }
  
    // calculate final values
    final_x = x + (cright - cleft);
    final_y = y + (cdown - cup);
  
    cout << "Final Position: "
         << "("
         << final_x << ", " << final_y << ")";
}
  
// Driver program to test above
int main()
{
    char command[] = "DDLRULL";
    int n = (sizeof(command) / sizeof(char)) - 1;
    int x = 3, y = 4;
    finalPos(command, n, x, y);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation to find 
// the final cell position
// in the given matrix
import java.util.*;
import java.lang.*;
import java.io.*;
  
class GFG
{
// function to find the 
// final cell position
// in the given matrix
static void finalPos(String command, int n,
                              int x, int y)
{
    // to count up, down, left 
    // and cright movements
    int cup, cdown, cleft, cright;
  
    // to store the final
    // coordinate position
    int final_x, final_y;
  
    cup = cdown = cleft = cright = 0;
  
    // traverse the command array
    for (int i = 0; i < n; i++) 
    {
        if (command.charAt(i) == 'U')
            cup++;
        else if (command.charAt(i) == 'D')
            cdown++;
        else if (command.charAt(i)== 'L')
            cleft++;
        else if (command.charAt(i) == 'R')
            cright++;
    }
  
    // calculate final values
    final_x = x + (cright - cleft);
    final_y = y + (cdown - cup);
  
    System.out.println("Final Position: "
                       "(" + final_x + ", "
                              final_y + ")");
}
  
// Driver Code
public static void main(String []args)
{
    String command = "DDLRULL";
    int n = command.length();
    int x = 3, y = 4;
    finalPos(command, n, x, y);
}
}
  
// This code is contributed
// by Subhadeep

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation to find 
// the final cell position
// in the given matrix
class GFG
{
// function to find the 
// final cell position
// in the given matrix
static void finalPos(string command, int n,
                              int x, int y)
{
    // to count up, down, left 
    // and cright movements
    int cup, cdown, cleft, cright;
  
    // to store the final
    // coordinate position
    int final_x, final_y;
  
    cup = cdown = cleft = cright = 0;
  
    // traverse the command array
    for (int i = 0; i < n; i++) 
    {
        if (command[i] == 'U')
            cup++;
        else if (command[i] == 'D')
            cdown++;
        else if (command[i]== 'L')
            cleft++;
        else if (command[i] == 'R')
            cright++;
    }
  
    // calculate final values
    final_x = x + (cright - cleft);
    final_y = y + (cdown - cup);
  
    System.Console.WriteLine("Final Position: "
                             "(" + final_x + ", "
                                    final_y + ")");
}
  
// Driver Code
public static void Main()
{
    string command = "DDLRULL";
    int n = command.Length;
    int x = 3, y = 4;
    finalPos(command, n, x, y);
}
}
  
// This code is contributed
// by mits

chevron_right


PHP

Output:

Final Position: (1, 5)

Time Complexity: O(n), where n is the number of commands.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.